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