给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个小时。