mirror of
				https://github.com/flynx/types.js.git
				synced 2025-10-30 02:50:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			126 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**********************************************************************
 | |
| * 
 | |
| *
 | |
| *
 | |
| **********************************************/  /* c8 ignore next 2 */
 | |
| ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define)
 | |
| (function(require){ var module={} // make module AMD/node compatible...
 | |
| /*********************************************************************/
 | |
| 
 | |
| var object = require('ig-object')
 | |
| 
 | |
| 
 | |
| /*********************************************************************/
 | |
| 
 | |
| var DateMixin =
 | |
| module.DateMixin =
 | |
| object.Mixin('DateMixin', 'soft', {
 | |
| 	timeStamp: function(...args){
 | |
| 		return (new this()).getTimeStamp(...args) },
 | |
| 	fromTimeStamp: function(ts){
 | |
| 		return (new this()).setTimeStamp(ts) },
 | |
| 	// convert string time period to milliseconds...
 | |
| 	str2ms: function(str, dfl){
 | |
| 		dfl = dfl || 'ms'
 | |
| 
 | |
| 		if(typeof(str) == typeof(123)){
 | |
| 			var val = str
 | |
| 			str = dfl
 | |
| 
 | |
| 		} else {
 | |
| 			var val = parseFloat(str)
 | |
| 			str = str.trim()
 | |
| 			// check if a unit is given...
 | |
| 			str = str == val ? 
 | |
| 				dfl 
 | |
| 				: str }
 | |
| 
 | |
| 		// NOTE: this is a small hack to avoid overcomplicating the 
 | |
| 		// 		pattern to still match the passed dfl unit...
 | |
| 		str = ' '+str
 | |
| 		var c = 
 | |
| 			(/[^a-z](m(illi)?(-)?s(ec(ond(s)?)?)?)$/i.test(str)
 | |
| 		   			|| /^[0-9]*(\.[0-9]+)?$/.test(str) ) ? 
 | |
| 				1
 | |
| 			: /[^a-z]s(ec(ond(s)?)?)?$/i.test(str) ? 
 | |
| 				1000
 | |
| 			: /[^a-z]m(in(ute(s)?)?)?$/i.test(str) ? 
 | |
| 				1000*60
 | |
| 			: /[^a-z]h(our(s)?)?$/i.test(str) ? 
 | |
| 				1000*60*60
 | |
| 			: /[^a-z]d(ay(s)?)?$/i.test(str) ? 
 | |
| 				1000*60*60*24
 | |
| 			: null
 | |
| 
 | |
| 		return c ? 
 | |
| 			val * c 
 | |
| 			: NaN },
 | |
| })
 | |
| 
 | |
| 
 | |
| // XXX should this be flat???
 | |
| var DateProtoMixin =
 | |
| module.DateProtoMixin =
 | |
| object.Mixin('DateProtoMixin', 'soft', {
 | |
| 	toShortDate: function(show_ms){
 | |
| 		return '' 
 | |
| 			+ this.getFullYear()
 | |
| 			+'-'+ ('0'+(this.getMonth()+1)).slice(-2)
 | |
| 			+'-'+ ('0'+this.getDate()).slice(-2)
 | |
| 			+' '+ ('0'+this.getHours()).slice(-2)
 | |
| 			+':'+ ('0'+this.getMinutes()).slice(-2)
 | |
| 			+':'+ ('0'+this.getSeconds()).slice(-2)
 | |
| 			+ (show_ms ? 
 | |
| 				':'+(('000'+this.getMilliseconds()).slice(-3))
 | |
| 				: '') },
 | |
| 	getTimeStamp: function(show_ms){
 | |
| 		return '' 
 | |
| 			+ this.getFullYear()
 | |
| 			+ ('0'+(this.getMonth()+1)).slice(-2)
 | |
| 			+ ('0'+this.getDate()).slice(-2)
 | |
| 			+ ('0'+this.getHours()).slice(-2)
 | |
| 			+ ('0'+this.getMinutes()).slice(-2)
 | |
| 			+ ('0'+this.getSeconds()).slice(-2)
 | |
| 			+ (show_ms ? 
 | |
| 				('000'+this.getMilliseconds()).slice(-3)
 | |
| 				: '') },
 | |
| 	setTimeStamp: function(ts){
 | |
| 		ts = ts.replace(/[^0-9]*/g, '')
 | |
| 		this.setFullYear(ts.slice(0, 4))
 | |
| 		this.setMonth(ts.slice(4, 6)*1-1)
 | |
| 		this.setDate(ts.slice(6, 8))
 | |
| 		this.setHours(ts.slice(8, 10))
 | |
| 		this.setMinutes(ts.slice(10, 12))
 | |
| 		this.setSeconds(ts.slice(12, 14))
 | |
| 		this.setMilliseconds(ts.slice(14, 17) || 0)
 | |
| 		return this },
 | |
| })
 | |
| 
 | |
| 
 | |
| 
 | |
| //---------------------------------------------------------------------
 | |
| 
 | |
| // NOTE: repatching a date should not lead to any side effects as this
 | |
| // 		does not add any state...
 | |
| // NOTE: this is done differently as there are contexts where there may 
 | |
| // 		be multiple Date objects in different contexts (nw/electron/..)
 | |
| var patchDate =
 | |
| module.patchDate = 
 | |
| function(date){
 | |
| 	date = date || Date
 | |
| 	DateMixin(date)
 | |
| 	DateProtoMixin(date.prototype)
 | |
| 	return date }
 | |
| 
 | |
| 
 | |
| 
 | |
| //---------------------------------------------------------------------
 | |
| 
 | |
| // patch the root date...
 | |
| patchDate()
 | |
| 
 | |
| 
 | |
| 
 | |
| /**********************************************************************
 | |
| * vim:set ts=4 sw=4 :                               */ return module })
 |