AstroJS/botanjs/src/Astro/utils/Date.js

141 lines
3.7 KiB
JavaScript
Raw Normal View History

2015-08-14 13:06:23 +00:00
(function(){
var ns = __namespace( "Astro.utils.Date" );
//// Static utilities
// Chinese char for 0-9
var cChar = [ "12295", "19968", "20108", "19977", "22235", "20116", "20845", "19971", "20843", "20061", "21313" ];
// Capital month
var CAP_MONTHS = [ false, false, false, true, false, true, false, false, true, false, true, false ];
var MONTH_ABBR = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var MONTH = [
"January"
, "February"
, "March"
, "April"
, "May"
, "June"
, "July"
, "August"
, "September"
, "October"
, "November"
, "December"
];
var DAY_ABBR = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
var DAY = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
// get responding chinese char from number
var cCountDay = function (num)
{
str = num.toString();
if( num != 0 && num % 10 == 0 )
{
return ( num == 10 ? "" : String.fromCharCode( cChar[ str[0] ] ) )
+ String.fromCharCode( cChar[10] );
}
else if( num < 10 )
{
return String.fromCharCode( cChar[ str[0] ] );
}
else if( num < 20 )
{
return String.fromCharCode( cChar[10] )
+ String.fromCharCode( cChar[ str[1] ] );
}
return String.fromCharCode( cChar[ str[0] ] )
+ String.fromCharCode( cChar[10] )
+ String.fromCharCode( cChar[ str[1] ] );
};
// Input yyyy-mm-dd small small
// output dd mmmm yyyy DDDDD
var prettyDay = function ( b, sMon, sDay )
{
var c = b.split("-");
var d = new Date( c[0], c[1] - 1, c[2] );
return d.getDate() + " "
+ ( sMon ? MONTH_ABBR[ d.getMonth() ] : MONTH[ d.getMonth() ] ) + " "
+ d.getFullYear() + " "
+ ( sDay ? DAY_ABBR[ d.getDay() ] : DAY[ d.getDay() ] )
;
};
// Small month stamp: output dd-mmm-yyyy
var smstamp = function ( dateObj )
{
return dateObj.getDate() + "-" + MONTH_ABBR[ dateObj.getMonth() ] + "-" + dateObj.getFullYear();
};
// Pretty format XXth MMMM, YYYY
var pretty = function( dateObj, plain )
{
return String( dateObj.getDate() )
+ ( plain ? "" : "<sup>" )
+ getOrdinalSuffix( dateObj.getDate() )
+ ( plain ? " " : "</sup> " )
+ MONTH[ dateObj.getMonth() ]
+ ", "
+ String( dateObj.getFullYear() )
;
};
// returns a timespan
// Input Array [ yyyy, mm, dd ], [ yyyy, mm, dd ]
var diff = function( from, to )
{
return new Date(
new Date( to[0], to[1], to[2] ).getTime()
- new Date( from[0], from[1], from[2] ).getTime()
);
};
// Get a chinese date format
var chinese = function ( date )
{
var str = date.getFullYear().toString();
var datestmp = "";
for(i in str)
{
datestmp += String.fromCharCode( cChar[ str[i] ] );
}
datestmp += String.fromCharCode("24180");
datestmp += cCountDay(date.getMonth() + 1)
+ String.fromCharCode("26376")
+ cCountDay(date.getDate())
+ String.fromCharCode("26085");
return datestmp;
};
// returns a suffix string
// st, nd, rd, th
var getOrdinalSuffix = function(day)
{
if (day < 4 || ( 20 < day && day < 24 )) {
if (day == 1 || day == 21) return "st";
else if (day == 2 || day == 22) return "nd";
else if (day == 3 || day == 23) return "rd";
}
else if (day == 31) return "st";
return "th";
};
ns[ NS_EXPORT ]( EX_FUNC, "pretty", pretty );
ns[ NS_EXPORT ]( EX_FUNC, "prettyDay", prettyDay );
ns[ NS_EXPORT ]( EX_FUNC, "diff", diff );
ns[ NS_EXPORT ]( EX_FUNC, "smstamp", smstamp );
ns[ NS_EXPORT ]( EX_FUNC, "chinese", chinese );
ns[ NS_EXPORT ]( EX_CONST, "CAP_MONTHS", CAP_MONTHS );
ns[ NS_EXPORT ]( EX_CONST, "MONTH", MONTH );
ns[ NS_EXPORT ]( EX_CONST, "MONTH_ABBR", MONTH_ABBR );
ns[ NS_EXPORT ]( EX_CONST, "DAY", DAY );
ns[ NS_EXPORT ]( EX_CONST, "DAY_ABBR", DAY_ABBR );
})();