给Javascriptdate对象添加小时数?

令我惊讶的是,Javascript的Date对象并没有实现任何types的add函数。

我只是想要一个可以做到这一点的函数:

var now = Date.now(); var fourHoursLater = now.addHours(4); function Date.prototype.addHours(h) { // how do I implement this? } 

我只想简单地指出一个方向。

  • 我需要做stringparsing吗?

  • 我可以使用setTime吗?

  • 毫秒怎么样?

喜欢这个:

 new Date(milliseconds + 4*3600*1000 /*4 hrs in ms*/)? 

这似乎真的很hackish – 甚至工作?

JavaScript本身有可怕的date/时间API的。 这是纯JavaScript中唯一的方法。 如果你正在做大量的date操作,我build议使用Datejs – 如Nosredna所build议的那样。

 Date.prototype.addHours = function(h) { this.setTime(this.getTime() + (h*60*60*1000)); return this; } 
 Date.prototype.addHours= function(h){ this.setHours(this.getHours()+h); return this; } 

testing:

 alert(new Date().addHours(4)); 

下面的代码是添加4个小时(例如今天的date)

 var today = new Date(); today.setHours(today.getHours() + 4); 

通过返回Date对象的副本而不是改变其参数,可能会使addHours方法不可变。

 Date.prototype.addHours= function(h){ var copiedDate = new Date(this.getTime()); copiedDate.setHours(copiedDate.getHours()+h); return copiedDate; } 

这样,您可以链接一堆方法调用,而不用担心状态。

kennebecbuild议的版本在更改DST或从DST更改时将失败,因为它是设置的小时数。

 this.setUTCHours(this.getUTCHours()+h); 

将增加h小时,独立于时间系统的特点。 贾森·哈维格的方法也是如此。

您可以使用momentjs http://momentjs.com/库。;

 var moment = require('moment'); foo = new moment(something).add(10, 'm').toDate(); 

Datejs库中有一个添加项 。

这里是JavaScriptdate方法 。 kennebec明智地提到了getHours()和setHours();

我也认为原来的对象不应该被修改。 所以为了节省未来的人力, Jason Harwig和Tahir Hasan 给出了一个综合解决scheme:

 Date.prototype.addHours= function(h){ var copiedDate = new Date(); copiedDate.setTime(this.getTime() + (h*60*60*1000)); return copiedDate; } 

检查它是否已经定义,否则在Date原型中定义它:

 if (!Date.prototype.addHours) { Date.prototype.addHours = function(h) { this.setHours(this.getHours() + h); return this; }; } 

对于javascript中的简单的加/减小时/分钟function,试试这个:

 function getTime (addHour, addMin){ addHour = (addHour?addHour:0); addMin = (addMin?addMin:0); var time = new Date(new Date().getTime()); var AM = true; var ndble = 0; var hours, newHour, overHour, newMin, overMin; //change form 24 to 12 hour clock if(time.getHours() >= 13){ hours = time.getHours() - 12; AM = (hours>=12?true:false); }else{ hours = time.getHours(); AM = (hours>=12?false:true); } //get the current minutes var minutes = time.getMinutes(); // set minute if((minutes+addMin) >= 60 || (minutes+addMin)<0){ overMin = (minutes+addMin)%60; overHour = Math.floor((minutes+addMin-Math.abs(overMin))/60); if(overMin<0){ overMin = overMin+60; overHour = overHour-Math.floor(overMin/60); } newMin = String((overMin<10?'0':'')+overMin); addHour = addHour+overHour; }else{ newMin = minutes+addMin; newMin = String((newMin<10?'0':'')+newMin); } //set hour if(( hours+addHour>=13 )||( hours+addHour<=0 )){ overHour = (hours+addHour)%12; ndble = Math.floor(Math.abs((hours+addHour)/12)); if(overHour<=0){ newHour = overHour+12; if(overHour == 0){ ndble++; } }else{ if(overHour ==0 ){ newHour = 12; ndble++; }else{ ndble++; newHour = overHour; } } newHour = (newHour<10?'0':'')+String(newHour); AM = ((ndble+1)%2===0)?AM:!AM; }else{ AM = (hours+addHour==12?!AM:AM); newHour = String((Number(hours)+addHour<10?'0':'')+(hours+addHour)); } var am = (AM)?'AM':'PM'; return new Array(newHour, newMin, am); }; 

这可以使用没有参数来获得当前时间

 getTime(); 

或者用参数来获得添加分钟/小时的时间

 getTime(1,30); // adds 1.5 hours to current time getTime(2); // adds 2 hours to current time getTime(0,120); // same as above 

甚至负面的时间作品

 getTime(-1, -30); // subtracts 1.5 hours from current time 

这个函数返回一个数组

 array([Hour], [Minute], [Meridian]) 

处理这个问题的另一种方法是将date转换为unixtime(epoch),然后在(毫秒)内添加等价物,然后将其转换回来。 这样,您可以处理date和月份的转换,例如将21个小时添加到4个小时,这将导致第二天01:00。

如果你不想使用库,并希望一个简单的JavaScript解决scheme,你可以使用我写的这个dateAdd()函数 。 它适用于夏令时,并允许您添加分钟,小时,天,星期等。

例:

 var now = Date.now(); var then = dateAdd(now, 4, 'hours'); 

这将返回一个date对象增加4个小时。