2011
Mar
01
實現PHP中mktime的 function,在 function中要注意,時間的單位,在JS中時間的單位是豪秒,而PHP的是秒,所以必須除以1000。
另外JS中月份的算法是從 0開始 , 0~11 ,運算的時候也要將月份特別處理。
mktime : javascript 實作
mktime 一般是要傳入六個值,分別是 「時,分,秒,月,日,年」依序傳入。
setMilliseconds一定要自行設定為0,否則JS millisecond預設是很奇怪的值,會造成算出來的日期多一天。
setDate一要放在 setMonth之前,否則當今天是1/31,這時setMonth(1),時間會變成 2/31,因為2月沒有31號,這樣js的timestamp就會出現計算錯誤。
- function mktime(h,m,s,month,day,year){
- var d=new Date();
- d.setDate(parseInt(day,10));
- d.setMonth(parseInt(month,10)-1);
- d.setFullYear(parseInt(year,10));
- d.setHours(parseInt(h,10));
- d.setMinutes(parseInt(m,10));
- d.setSeconds(parseInt(s,10));
- d.setMilliseconds(0);
- return parseInt(d.getTime()/1000);//秒
- }
求明天的日期
- var d=new Date( );
- var t=(mktime(0,0,0,d.getMonth()+1,d.getDate(),d.getFullYear())+86400)*1000;
- d.setTime(t);
- alert(d.getFullYear()+" "+(d.getMonth()+1)+" "+d.getDate());
求各月份的日期 (大小月與潤年)
- function getMonthDay(y,m){
- m=parseInt(m);
- y=parseInt(y);
- switch(m){
- case 1: case 3: case 5: case 7: case 8:case 10: case 12:
- return 31;
- break;
- case 2:
- if((y%4==0 && y%100!=0) || y%400==0){
- return 29;
- }
- return 28;
- break;
- default:
- return 30;
- break;
- }
- };
取得當月的起始日,與結尾日
測試結果
- //取得XX月份的起始日,與結尾日
- function getMonthPeriod(year,month){
- var startDate=year+"-"+month+'-1'; month++;
- if(month>12){year++;month=1;}
- var time = mktime(0,0,0,month,1,year)-1;
- var d = new Date(); d.setTime(time*1000);
- var endDate=d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate();
- return {startDate:startDate,endDate:endDate};
- }
- var s=getMonthPeriod(2011,2);
- /* s=data{
- startDate = 2011-2-1
- endDate = 2011-2-28
- }*/