blob: 0705daefad4f46cad17e86e91f5c46b49cd87770 [file] [log] [blame]
dojo.provide("dojo.date.format");
dojo.require("dojo.date.common");
dojo.require("dojo.date.supplemental");
dojo.require("dojo.lang.array");
dojo.require("dojo.lang.common");
dojo.require("dojo.lang.func");
dojo.require("dojo.string.common");
dojo.require("dojo.i18n.common");
dojo.requireLocalization("dojo.i18n.calendar","gregorian",null,"zh-cn,zh-hk,de,ko,zh-tw,zh,ja,fi,pt-br,fr,es,ROOT,hu,en,it,sv,nl,pt");
dojo.requireLocalization("dojo.i18n.calendar","gregorianExtras",null,"zh,ja,ROOT");
(function(){
dojo.date.format=function(_1,_2){
if(typeof _2=="string"){
dojo.deprecated("dojo.date.format","To format dates with POSIX-style strings, please use dojo.date.strftime instead","0.5");
return dojo.date.strftime(_1,_2);
}
function formatPattern(_3,_4){
return _4.replace(/([a-z])\1*/ig,function(_5){
var s;
var c=_5.charAt(0);
var l=_5.length;
var _9;
var _a=["abbr","wide","narrow"];
switch(c){
case "G":
if(l>3){
dojo.unimplemented("Era format not implemented");
}
s=_b.eras[_3.getFullYear()<0?1:0];
break;
case "y":
s=_3.getFullYear();
switch(l){
case 1:
break;
case 2:
s=String(s);
s=s.substr(s.length-2);
break;
default:
_9=true;
}
break;
case "Q":
case "q":
s=Math.ceil((_3.getMonth()+1)/3);
switch(l){
case 1:
case 2:
_9=true;
break;
case 3:
case 4:
dojo.unimplemented("Quarter format not implemented");
}
break;
case "M":
case "L":
var m=_3.getMonth();
var _d;
switch(l){
case 1:
case 2:
s=m+1;
_9=true;
break;
case 3:
case 4:
case 5:
_d=_a[l-3];
break;
}
if(_d){
var _e=(c=="L")?"standalone":"format";
var _f=["months",_e,_d].join("-");
s=_b[_f][m];
}
break;
case "w":
var _10=0;
s=dojo.date.getWeekOfYear(_3,_10);
_9=true;
break;
case "d":
s=_3.getDate();
_9=true;
break;
case "D":
s=dojo.date.getDayOfYear(_3);
_9=true;
break;
case "E":
case "e":
case "c":
var d=_3.getDay();
var _d;
switch(l){
case 1:
case 2:
if(c=="e"){
var _12=dojo.date.getFirstDayOfWeek(_2.locale);
d=(d-_12+7)%7;
}
if(c!="c"){
s=d+1;
_9=true;
break;
}
case 3:
case 4:
case 5:
_d=_a[l-3];
break;
}
if(_d){
var _e=(c=="c")?"standalone":"format";
var _f=["days",_e,_d].join("-");
s=_b[_f][d];
}
break;
case "a":
var _13=(_3.getHours()<12)?"am":"pm";
s=_b[_13];
break;
case "h":
case "H":
case "K":
case "k":
var h=_3.getHours();
switch(c){
case "h":
s=(h%12)||12;
break;
case "H":
s=h;
break;
case "K":
s=(h%12);
break;
case "k":
s=h||24;
break;
}
_9=true;
break;
case "m":
s=_3.getMinutes();
_9=true;
break;
case "s":
s=_3.getSeconds();
_9=true;
break;
case "S":
s=Math.round(_3.getMilliseconds()*Math.pow(10,l-3));
break;
case "v":
case "z":
s=dojo.date.getTimezoneName(_3);
if(s){
break;
}
l=4;
case "Z":
var _15=_3.getTimezoneOffset();
var tz=[(_15<=0?"+":"-"),dojo.string.pad(Math.floor(Math.abs(_15)/60),2),dojo.string.pad(Math.abs(_15)%60,2)];
if(l==4){
tz.splice(0,0,"GMT");
tz.splice(3,0,":");
}
s=tz.join("");
break;
case "Y":
case "u":
case "W":
case "F":
case "g":
case "A":
s="?";
break;
default:
dojo.raise("dojo.date.format: invalid pattern char: "+_4);
}
if(_9){
s=dojo.string.pad(s,l);
}
return s;
});
}
_2=_2||{};
var _17=dojo.hostenv.normalizeLocale(_2.locale);
var _18=_2.formatLength||"short";
var _b=dojo.date._getGregorianBundle(_17);
var str=[];
var _1a=dojo.lang.curry(this,formatPattern,_1);
if(_2.selector=="yearOnly"){
var _1b=_1.getFullYear();
if(_17.match(/^zh|^ja/)){
_1b+="\u5e74";
}
return _1b;
}
if(_2.selector!="timeOnly"){
var _1c=_2.datePattern||_b["dateFormat-"+_18];
if(_1c){
str.push(_processPattern(_1c,_1a));
}
}
if(_2.selector!="dateOnly"){
var _1d=_2.timePattern||_b["timeFormat-"+_18];
if(_1d){
str.push(_processPattern(_1d,_1a));
}
}
var _1e=str.join(" ");
return _1e;
};
dojo.date.parse=function(_1f,_20){
_20=_20||{};
var _21=dojo.hostenv.normalizeLocale(_20.locale);
var _22=dojo.date._getGregorianBundle(_21);
var _23=_20.formatLength||"full";
if(!_20.selector){
_20.selector="dateOnly";
}
var _24=_20.datePattern||_22["dateFormat-"+_23];
var _25=_20.timePattern||_22["timeFormat-"+_23];
var _26;
if(_20.selector=="dateOnly"){
_26=_24;
}else{
if(_20.selector=="timeOnly"){
_26=_25;
}else{
if(_20.selector=="dateTime"){
_26=_24+" "+_25;
}else{
var msg="dojo.date.parse: Unknown selector param passed: '"+_20.selector+"'.";
msg+=" Defaulting to date pattern.";
dojo.debug(msg);
_26=_24;
}
}
}
var _28=[];
var _29=_processPattern(_26,dojo.lang.curry(this,_buildDateTimeRE,_28,_22,_20));
var _2a=new RegExp("^"+_29+"$");
var _2b=_2a.exec(_1f);
if(!_2b){
return null;
}
var _2c=["abbr","wide","narrow"];
var _2d=new Date(1972,0);
var _2e={};
for(var i=1;i<_2b.length;i++){
var grp=_28[i-1];
var l=grp.length;
var v=_2b[i];
switch(grp.charAt(0)){
case "y":
if(l!=2){
_2d.setFullYear(v);
_2e.year=v;
}else{
if(v<100){
v=Number(v);
var _33=""+new Date().getFullYear();
var _34=_33.substring(0,2)*100;
var _35=Number(_33.substring(2,4));
var _36=Math.min(_35+20,99);
var num=(v<_36)?_34+v:_34-100+v;
_2d.setFullYear(num);
_2e.year=num;
}else{
if(_20.strict){
return null;
}
_2d.setFullYear(v);
_2e.year=v;
}
}
break;
case "M":
if(l>2){
if(!_20.strict){
v=v.replace(/\./g,"");
v=v.toLowerCase();
}
var _38=_22["months-format-"+_2c[l-3]].concat();
for(var j=0;j<_38.length;j++){
if(!_20.strict){
_38[j]=_38[j].toLowerCase();
}
if(v==_38[j]){
_2d.setMonth(j);
_2e.month=j;
break;
}
}
if(j==_38.length){
dojo.debug("dojo.date.parse: Could not parse month name: '"+v+"'.");
return null;
}
}else{
_2d.setMonth(v-1);
_2e.month=v-1;
}
break;
case "E":
case "e":
if(!_20.strict){
v=v.toLowerCase();
}
var _3a=_22["days-format-"+_2c[l-3]].concat();
for(var j=0;j<_3a.length;j++){
if(!_20.strict){
_3a[j]=_3a[j].toLowerCase();
}
if(v==_3a[j]){
break;
}
}
if(j==_3a.length){
dojo.debug("dojo.date.parse: Could not parse weekday name: '"+v+"'.");
return null;
}
break;
case "d":
_2d.setDate(v);
_2e.date=v;
break;
case "a":
var am=_20.am||_22.am;
var pm=_20.pm||_22.pm;
if(!_20.strict){
v=v.replace(/\./g,"").toLowerCase();
am=am.replace(/\./g,"").toLowerCase();
pm=pm.replace(/\./g,"").toLowerCase();
}
if(_20.strict&&v!=am&&v!=pm){
dojo.debug("dojo.date.parse: Could not parse am/pm part.");
return null;
}
var _3d=_2d.getHours();
if(v==pm&&_3d<12){
_2d.setHours(_3d+12);
}else{
if(v==am&&_3d==12){
_2d.setHours(0);
}
}
break;
case "K":
if(v==24){
v=0;
}
case "h":
case "H":
case "k":
if(v>23){
dojo.debug("dojo.date.parse: Illegal hours value");
return null;
}
_2d.setHours(v);
break;
case "m":
_2d.setMinutes(v);
break;
case "s":
_2d.setSeconds(v);
break;
case "S":
_2d.setMilliseconds(v);
break;
default:
dojo.unimplemented("dojo.date.parse: unsupported pattern char="+grp.charAt(0));
}
}
if(_2e.year&&_2d.getFullYear()!=_2e.year){
dojo.debug("Parsed year: '"+_2d.getFullYear()+"' did not match input year: '"+_2e.year+"'.");
return null;
}
if(_2e.month&&_2d.getMonth()!=_2e.month){
dojo.debug("Parsed month: '"+_2d.getMonth()+"' did not match input month: '"+_2e.month+"'.");
return null;
}
if(_2e.date&&_2d.getDate()!=_2e.date){
dojo.debug("Parsed day of month: '"+_2d.getDate()+"' did not match input day of month: '"+_2e.date+"'.");
return null;
}
return _2d;
};
function _processPattern(_3e,_3f,_40,_41){
var _42=function(x){
return x;
};
_3f=_3f||_42;
_40=_40||_42;
_41=_41||_42;
var _44=_3e.match(/(''|[^'])+/g);
var _45=false;
for(var i=0;i<_44.length;i++){
if(!_44[i]){
_44[i]="";
}else{
_44[i]=(_45?_40:_3f)(_44[i]);
_45=!_45;
}
}
return _41(_44.join(""));
}
function _buildDateTimeRE(_47,_48,_49,_4a){
return _4a.replace(/([a-z])\1*/ig,function(_4b){
var s;
var c=_4b.charAt(0);
var l=_4b.length;
switch(c){
case "y":
s="\\d"+((l==2)?"{2,4}":"+");
break;
case "M":
s=(l>2)?"\\S+":"\\d{1,2}";
break;
case "d":
s="\\d{1,2}";
break;
case "E":
s="\\S+";
break;
case "h":
case "H":
case "K":
case "k":
s="\\d{1,2}";
break;
case "m":
case "s":
s="[0-5]\\d";
break;
case "S":
s="\\d{1,3}";
break;
case "a":
var am=_49.am||_48.am||"AM";
var pm=_49.pm||_48.pm||"PM";
if(_49.strict){
s=am+"|"+pm;
}else{
s=am;
s+=(am!=am.toLowerCase())?"|"+am.toLowerCase():"";
s+="|";
s+=(pm!=pm.toLowerCase())?pm+"|"+pm.toLowerCase():pm;
}
break;
default:
dojo.unimplemented("parse of date format, pattern="+_4a);
}
if(_47){
_47.push(_4b);
}
return "\\s*("+s+")\\s*";
});
}
})();
dojo.date.strftime=function(_51,_52,_53){
var _54=null;
function _(s,n){
return dojo.string.pad(s,n||2,_54||"0");
}
var _57=dojo.date._getGregorianBundle(_53);
function $(_58){
switch(_58){
case "a":
return dojo.date.getDayShortName(_51,_53);
case "A":
return dojo.date.getDayName(_51,_53);
case "b":
case "h":
return dojo.date.getMonthShortName(_51,_53);
case "B":
return dojo.date.getMonthName(_51,_53);
case "c":
return dojo.date.format(_51,{locale:_53});
case "C":
return _(Math.floor(_51.getFullYear()/100));
case "d":
return _(_51.getDate());
case "D":
return $("m")+"/"+$("d")+"/"+$("y");
case "e":
if(_54==null){
_54=" ";
}
return _(_51.getDate());
case "f":
if(_54==null){
_54=" ";
}
return _(_51.getMonth()+1);
case "g":
break;
case "G":
dojo.unimplemented("unimplemented modifier 'G'");
break;
case "F":
return $("Y")+"-"+$("m")+"-"+$("d");
case "H":
return _(_51.getHours());
case "I":
return _(_51.getHours()%12||12);
case "j":
return _(dojo.date.getDayOfYear(_51),3);
case "k":
if(_54==null){
_54=" ";
}
return _(_51.getHours());
case "l":
if(_54==null){
_54=" ";
}
return _(_51.getHours()%12||12);
case "m":
return _(_51.getMonth()+1);
case "M":
return _(_51.getMinutes());
case "n":
return "\n";
case "p":
return _57[_51.getHours()<12?"am":"pm"];
case "r":
return $("I")+":"+$("M")+":"+$("S")+" "+$("p");
case "R":
return $("H")+":"+$("M");
case "S":
return _(_51.getSeconds());
case "t":
return "\t";
case "T":
return $("H")+":"+$("M")+":"+$("S");
case "u":
return String(_51.getDay()||7);
case "U":
return _(dojo.date.getWeekOfYear(_51));
case "V":
return _(dojo.date.getIsoWeekOfYear(_51));
case "W":
return _(dojo.date.getWeekOfYear(_51,1));
case "w":
return String(_51.getDay());
case "x":
return dojo.date.format(_51,{selector:"dateOnly",locale:_53});
case "X":
return dojo.date.format(_51,{selector:"timeOnly",locale:_53});
case "y":
return _(_51.getFullYear()%100);
case "Y":
return String(_51.getFullYear());
case "z":
var _59=_51.getTimezoneOffset();
return (_59>0?"-":"+")+_(Math.floor(Math.abs(_59)/60))+":"+_(Math.abs(_59)%60);
case "Z":
return dojo.date.getTimezoneName(_51);
case "%":
return "%";
}
}
var _5a="";
var i=0;
var _5c=0;
var _5d=null;
while((_5c=_52.indexOf("%",i))!=-1){
_5a+=_52.substring(i,_5c++);
switch(_52.charAt(_5c++)){
case "_":
_54=" ";
break;
case "-":
_54="";
break;
case "0":
_54="0";
break;
case "^":
_5d="upper";
break;
case "*":
_5d="lower";
break;
case "#":
_5d="swap";
break;
default:
_54=null;
_5c--;
break;
}
var _5e=$(_52.charAt(_5c++));
switch(_5d){
case "upper":
_5e=_5e.toUpperCase();
break;
case "lower":
_5e=_5e.toLowerCase();
break;
case "swap":
var _5f=_5e.toLowerCase();
var _60="";
var j=0;
var ch="";
while(j<_5e.length){
ch=_5e.charAt(j);
_60+=(ch==_5f.charAt(j))?ch.toUpperCase():ch.toLowerCase();
j++;
}
_5e=_60;
break;
default:
break;
}
_5d=null;
_5a+=_5e;
i=_5c;
}
_5a+=_52.substring(i);
return _5a;
};
(function(){
var _63=[];
dojo.date.addCustomFormats=function(_64,_65){
_63.push({pkg:_64,name:_65});
};
dojo.date._getGregorianBundle=function(_66){
var _67={};
dojo.lang.forEach(_63,function(_68){
var _69=dojo.i18n.getLocalization(_68.pkg,_68.name,_66);
_67=dojo.lang.mixin(_67,_69);
},this);
return _67;
};
})();
dojo.date.addCustomFormats("dojo.i18n.calendar","gregorian");
dojo.date.addCustomFormats("dojo.i18n.calendar","gregorianExtras");
dojo.date.getNames=function(_6a,_6b,use,_6d){
var _6e;
var _6f=dojo.date._getGregorianBundle(_6d);
var _70=[_6a,use,_6b];
if(use=="standAlone"){
_6e=_6f[_70.join("-")];
}
_70[1]="format";
return (_6e||_6f[_70.join("-")]).concat();
};
dojo.date.getDayName=function(_71,_72){
return dojo.date.getNames("days","wide","format",_72)[_71.getDay()];
};
dojo.date.getDayShortName=function(_73,_74){
return dojo.date.getNames("days","abbr","format",_74)[_73.getDay()];
};
dojo.date.getMonthName=function(_75,_76){
return dojo.date.getNames("months","wide","format",_76)[_75.getMonth()];
};
dojo.date.getMonthShortName=function(_77,_78){
return dojo.date.getNames("months","abbr","format",_78)[_77.getMonth()];
};
dojo.date.toRelativeString=function(_79){
var now=new Date();
var _7b=(now-_79)/1000;
var end=" ago";
var _7d=false;
if(_7b<0){
_7d=true;
end=" from now";
_7b=-_7b;
}
if(_7b<60){
_7b=Math.round(_7b);
return _7b+" second"+(_7b==1?"":"s")+end;
}
if(_7b<60*60){
_7b=Math.round(_7b/60);
return _7b+" minute"+(_7b==1?"":"s")+end;
}
if(_7b<60*60*24){
_7b=Math.round(_7b/3600);
return _7b+" hour"+(_7b==1?"":"s")+end;
}
if(_7b<60*60*24*7){
_7b=Math.round(_7b/(3600*24));
if(_7b==1){
return _7d?"Tomorrow":"Yesterday";
}else{
return _7b+" days"+end;
}
}
return dojo.date.format(_79);
};
dojo.date.toSql=function(_7e,_7f){
return dojo.date.strftime(_7e,"%F"+!_7f?" %T":"");
};
dojo.date.fromSql=function(_80){
var _81=_80.split(/[\- :]/g);
while(_81.length<6){
_81.push(0);
}
return new Date(_81[0],(parseInt(_81[1],10)-1),_81[2],_81[3],_81[4],_81[5]);
};