161 lines
5.6 KiB
JavaScript
161 lines
5.6 KiB
JavaScript
/*
|
|
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
|
|
*/
|
|
scheduler.date={
|
|
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;
|
|
},
|
|
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){
|
|
if (shift===0) shift=6;
|
|
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){
|
|
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;
|
|
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;
|
|
}
|
|
});
|
|
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;
|
|
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;
|
|
}
|
|
}
|
|
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();
|
|
if (nday === 0) {
|
|
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
|
|
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)
|
|
var week_number = 1 + Math.floor( ordinal_date / 7);
|
|
return week_number;
|
|
},
|
|
|
|
getUTCISOWeek: function(ndate){
|
|
return this.getISOWeek(ndate);
|
|
}
|
|
}; |