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
- }*/