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就会出现计算错误。

  1. function mktime(h,m,s,month,day,year){
  2. var d=new Date();
  3. d.setDate(parseInt(day,10));
  4. d.setMonth(parseInt(month,10)-1);
  5. d.setFullYear(parseInt(year,10));
  6. d.setHours(parseInt(h,10));
  7. d.setMinutes(parseInt(m,10));
  8. d.setSeconds(parseInt(s,10));
  9. d.setMilliseconds(0);
  10. return parseInt(d.getTime()/1000);//秒
  11. }

求明天的日期

  1. var d=new Date( );
  2. var t=(mktime(0,0,0,d.getMonth()+1,d.getDate(),d.getFullYear())+86400)*1000;
  3. d.setTime(t);
  4. alert(d.getFullYear()+" "+(d.getMonth()+1)+" "+d.getDate());

求各月份的日期 (大小月与润年)

  1. function getMonthDay(y,m){
  2. m=parseInt(m);
  3. y=parseInt(y);
  4. switch(m){
  5. case 1: case 3: case 5: case 7: case 8:case 10: case 12:
  6. return 31;
  7. break;
  8. case 2:
  9. if((y%4==0 && y%100!=0) || y%400==0){
  10. return 29;
  11. }
  12. return 28;
  13. break;
  14. default:
  15. return 30;
  16. break;
  17. }
  18. };

取得当月的起始日,与结尾日

  1. //取得XX月份的起始日,与结尾日
  2. function getMonthPeriod(year,month){
  3. var startDate=year+"-"+month+'-1'; month++;
  4. if(month>12){year++;month=1;}
  5. var time = mktime(0,0,0,month,1,year)-1;
  6. var d = new Date(); d.setTime(time*1000);
  7. var endDate=d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate();
  8. return {startDate:startDate,endDate:endDate};
  9. }
测试结果
  1. var s=getMonthPeriod(2011,2);
  2. /* s=data{
  3. startDate = 2011-2-1
  4. endDate = 2011-2-28
  5. }*/

回應 (Leave a comment)