2011-08-03 14:09:14 +00:00
/ *
This software is allowed to use under GPL or you need to obtain Commercial or Enterise License
to use it in not GPL project . Please contact sales @ dhtmlx . com for details
* /
2011-04-07 16:41:06 +00:00
scheduler . date = {
2011-08-03 14:09:14 +00:00
init : function ( ) {
var s = scheduler . locale . date . month _short ;
var t = scheduler . locale . date . month _short _hash = { } ;
for ( var i = 0 ; i < s . length ; i ++ )
t [ s [ i ] ] = i ;
var s = scheduler . locale . date . month _full ;
var t = scheduler . locale . date . month _full _hash = { } ;
for ( var i = 0 ; i < s . length ; i ++ )
t [ s [ i ] ] = i ;
} ,
2011-04-07 16:41:06 +00:00
date _part : function ( date ) {
date . setHours ( 0 ) ;
date . setMinutes ( 0 ) ;
date . setSeconds ( 0 ) ;
date . setMilliseconds ( 0 ) ;
return date ;
} ,
time _part : function ( date ) {
return ( date . valueOf ( ) / 1000 - date . getTimezoneOffset ( ) * 60 ) % 86400 ;
} ,
week _start : function ( date ) {
var shift = date . getDay ( ) ;
if ( scheduler . config . start _on _monday ) {
2011-08-03 14:09:14 +00:00
if ( shift === 0 ) shift = 6 ;
2011-04-07 16:41:06 +00:00
else shift -- ;
}
return this . date _part ( this . add ( date , - 1 * shift , "day" ) ) ;
} ,
month _start : function ( date ) {
date . setDate ( 1 ) ;
return this . date _part ( date ) ;
} ,
year _start : function ( date ) {
date . setMonth ( 0 ) ;
return this . month _start ( date ) ;
} ,
day _start : function ( date ) {
return this . date _part ( date ) ;
} ,
add : function ( date , inc , mode ) {
var ndate = new Date ( date . valueOf ( ) ) ;
switch ( mode ) {
2011-08-03 14:09:14 +00:00
case "day" :
ndate . setDate ( ndate . getDate ( ) + inc ) ;
if ( date . getDate ( ) == ndate . getDate ( ) && ! ! inc ) {
do {
ndate . setTime ( ndate . getTime ( ) + 60 * 60 * 1000 ) ;
} while ( date . getDate ( ) == ndate . getDate ( ) )
}
break ;
2011-04-07 16:41:06 +00:00
case "week" : ndate . setDate ( ndate . getDate ( ) + 7 * inc ) ; break ;
case "month" : ndate . setMonth ( ndate . getMonth ( ) + inc ) ; break ;
case "year" : ndate . setYear ( ndate . getFullYear ( ) + inc ) ; break ;
case "hour" : ndate . setHours ( ndate . getHours ( ) + inc ) ; break ;
case "minute" : ndate . setMinutes ( ndate . getMinutes ( ) + inc ) ; break ;
default :
return scheduler . date [ "add_" + mode ] ( date , inc , mode ) ;
}
return ndate ;
} ,
to _fixed : function ( num ) {
if ( num < 10 ) return "0" + num ;
return num ;
} ,
copy : function ( date ) {
return new Date ( date . valueOf ( ) ) ;
} ,
date _to _str : function ( format , utc ) {
format = format . replace ( /%[a-zA-Z]/g , function ( a ) {
switch ( a ) {
case "%d" : return "\"+scheduler.date.to_fixed(date.getDate())+\"" ;
case "%m" : return "\"+scheduler.date.to_fixed((date.getMonth()+1))+\"" ;
case "%j" : return "\"+date.getDate()+\"" ;
case "%n" : return "\"+(date.getMonth()+1)+\"" ;
case "%y" : return "\"+scheduler.date.to_fixed(date.getFullYear()%100)+\"" ;
case "%Y" : return "\"+date.getFullYear()+\"" ;
case "%D" : return "\"+scheduler.locale.date.day_short[date.getDay()]+\"" ;
case "%l" : return "\"+scheduler.locale.date.day_full[date.getDay()]+\"" ;
case "%M" : return "\"+scheduler.locale.date.month_short[date.getMonth()]+\"" ;
case "%F" : return "\"+scheduler.locale.date.month_full[date.getMonth()]+\"" ;
case "%h" : return "\"+scheduler.date.to_fixed((date.getHours()+11)%12+1)+\"" ;
case "%g" : return "\"+((date.getHours()+11)%12+1)+\"" ;
case "%G" : return "\"+date.getHours()+\"" ;
case "%H" : return "\"+scheduler.date.to_fixed(date.getHours())+\"" ;
case "%i" : return "\"+scheduler.date.to_fixed(date.getMinutes())+\"" ;
case "%a" : return "\"+(date.getHours()>11?\"pm\":\"am\")+\"" ;
case "%A" : return "\"+(date.getHours()>11?\"PM\":\"AM\")+\"" ;
case "%s" : return "\"+scheduler.date.to_fixed(date.getSeconds())+\"" ;
case "%W" : return "\"+scheduler.date.to_fixed(scheduler.date.getISOWeek(date))+\"" ;
default : return a ;
}
2011-08-03 14:09:14 +00:00
} ) ;
2011-04-07 16:41:06 +00:00
if ( utc ) format = format . replace ( /date\.get/g , "date.getUTC" ) ;
return new Function ( "date" , "return \"" + format + "\";" ) ;
} ,
str _to _date : function ( format , utc ) {
var splt = "var temp=date.split(/[^0-9a-zA-Z]+/g);" ;
var mask = format . match ( /%[a-zA-Z]/g ) ;
for ( var i = 0 ; i < mask . length ; i ++ ) {
switch ( mask [ i ] ) {
case "%j" :
case "%d" : splt += "set[2]=temp[" + i + "]||1;" ;
break ;
case "%n" :
case "%m" : splt += "set[1]=(temp[" + i + "]||1)-1;" ;
break ;
case "%y" : splt += "set[0]=temp[" + i + "]*1+(temp[" + i + "]>50?1900:2000);" ;
break ;
case "%g" :
case "%G" :
case "%h" :
case "%H" :
splt += "set[3]=temp[" + i + "]||0;" ;
break ;
case "%i" :
splt += "set[4]=temp[" + i + "]||0;" ;
break ;
case "%Y" : splt += "set[0]=temp[" + i + "]||0;" ;
break ;
case "%a" :
case "%A" : splt += "set[3]=set[3]%12+((temp[" + i + "]||'').toLowerCase()=='am'?0:12);" ;
break ;
case "%s" : splt += "set[5]=temp[" + i + "]||0;" ;
break ;
2011-08-03 14:09:14 +00:00
case "%M" : splt += "set[1]=scheduler.locale.date.month_short_hash[temp[" + i + "]]||0;" ;
break ;
case "%F" : splt += "set[1]=scheduler.locale.date.month_full_hash[temp[" + i + "]]||0;" ;
break ;
default :
break ;
2011-04-07 16:41:06 +00:00
}
}
var code = "set[0],set[1],set[2],set[3],set[4],set[5]" ;
if ( utc ) code = " Date.UTC(" + code + ")" ;
return new Function ( "date" , "var set=[0,0,1,0,0,0]; " + splt + " return new Date(" + code + ");" ) ;
} ,
getISOWeek : function ( ndate ) {
if ( ! ndate ) return false ;
var nday = ndate . getDay ( ) ;
2011-08-03 14:09:14 +00:00
if ( nday === 0 ) {
2011-04-07 16:41:06 +00:00
nday = 7 ;
}
var first _thursday = new Date ( ndate . valueOf ( ) ) ;
first _thursday . setDate ( ndate . getDate ( ) + ( 4 - nday ) ) ;
var year _number = first _thursday . getFullYear ( ) ; // year of the first Thursday
2011-08-03 14:09:14 +00:00
var ordinal _date = Math . round ( ( first _thursday . getTime ( ) - new Date ( year _number , 0 , 1 ) . getTime ( ) ) / 86400000 ) ; //ordinal date of the first Thursday - 1 (so not really ordinal date)
2011-04-07 16:41:06 +00:00
var week _number = 1 + Math . floor ( ordinal _date / 7 ) ;
return week _number ;
} ,
getUTCISOWeek : function ( ndate ) {
2011-08-03 14:09:14 +00:00
return this . getISOWeek ( ndate ) ;
}
} ;