JavaScript的Date对象没有实现任何类型的add函数,这让我感到惊讶。

我只是想要一个函数,可以这样做:

var now = Date.now(); var fourHoursLater = now.addHours(4); 函数Date.prototype.addHours(h) { //我如何实现这个? }

我只是想要一些指路的指点。

我需要做字符串解析吗? 我可以使用setTime吗? 毫秒呢?

是这样的:

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

这看起来真的很奇怪——它真的有用吗?


当前回答

检查它是否还没有定义。否则,在Date原型中定义它:

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

其他回答

我也认为原来的对象不应该被修改。因此,为了节省未来的人力,这里有一个基于Jason Harwig和Tahir Hasan回答的综合解决方案:

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

你可以使用Moment.js库。

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

最简单的方法是:

var d = new Date();
d = new Date(d.setHours(d.getHours() + 2));

它将使当前时间增加2小时。

d = 2021年1月30日星期六23:41:43 GMT+0500(巴基斯坦标准时间)。

d加2小时后的值= 2021年1月31日01:41:43 GMT+0500(巴基斯坦标准时间)。

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

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

通过这种方式,您可以将一堆方法调用链接起来,而不用担心状态。

我觉得这个应该能搞定

var nextHour =日期。 游戏机。log (nextHour)