Jef*_*ang 353 javascript datetime
我很惊讶Javascript的Date对象没有实现任何类型的添加功能.
我只想要一个可以做到这一点的函数:
var now = Date.now();
var fourHoursLater = now.addHours(4);
function Date.prototype.addHours(h) {
// how do I implement this?
}
Run Code Online (Sandbox Code Playgroud)
我只想在一个方向上指点一些.
我需要进行字符串解析吗?
我可以使用setTime吗?
毫秒怎么样?
像这样:
new Date(milliseconds + 4*3600*1000 /*4 hrs in ms*/)?
Run Code Online (Sandbox Code Playgroud)
这看起来真的很乱 - 它甚至可以工作吗?
ken*_*bec 364
Date.prototype.addHours= function(h){
this.setHours(this.getHours()+h);
return this;
}
Run Code Online (Sandbox Code Playgroud)
测试:
alert(new Date().addHours(4));
Run Code Online (Sandbox Code Playgroud)
Jas*_*wig 354
JavaScript本身具有可怕的日期/时间API.这是在纯JavaScript中实现它的唯一方法.我推荐使用Datejs - 正如Nosredna建议的那样 - 如果你正在做很多日期操作的话.
Date.prototype.addHours = function(h) {
this.setTime(this.getTime() + (h*60*60*1000));
return this;
}
Run Code Online (Sandbox Code Playgroud)
Sup*_*ova 134
以下代码是为了添加4个小时(例如今天的日期)
var today = new Date();
today.setHours(today.getHours() + 4);
Run Code Online (Sandbox Code Playgroud)
如果您尝试添加4到23,则不会导致错误(请参阅文档):
如果指定的参数超出预期范围,则setHours()会尝试相应地更新Date对象中的日期信息
Tah*_*san 39
最好通过返回Date对象的副本而不是改变其参数来使addHours方法不可变.
Date.prototype.addHours= function(h){
var copiedDate = new Date(this.getTime());
copiedDate.setHours(copiedDate.getHours()+h);
return copiedDate;
}
Run Code Online (Sandbox Code Playgroud)
这样你可以链接一堆方法调用而不用担心状态.
pet*_*ter 21
更改为DST或来自DST时,kennebec建议的版本将失败,因为它是设置的小时数.
this.setUTCHours(this.getUTCHours()+h);
Run Code Online (Sandbox Code Playgroud)
将增加h几小时,以this独立于时间系统的特点.Jason Harwig的方法也适用.
Cma*_*mag 18
您可以使用momentjs http://momentjs.com/ Library.
var moment = require('moment');
foo = new moment(something).add(10, 'm').toDate();
Run Code Online (Sandbox Code Playgroud)
如果您想以更实用的方式(不变性)执行此操作,我将返回一个新的日期对象而不是修改现有对象,并且我不会更改原型而是创建一个独立的函数。这是示例:
//JS
function addHoursToDate(date, hours) {
return new Date(new Date(date).setHours(date.getHours() + hours));
}
//TS
function addHoursToDate(date: Date, hours: number): Date {
return new Date(new Date(date).setHours(date.getHours() + hours));
}
let myDate = new Date();
console.log(myDate)
console.log(addHoursToDate(myDate,2))Run Code Online (Sandbox Code Playgroud)
在一行中获取距现在正好 2 小时的日期。
您需要将毫秒数传递给 newDate。
let expiryDate = new Date(new Date().setHours(new Date().getHours() + 2));
or
let expiryDate2 = new Date(Date.now() + 2 * (60 * 60 * 1000) );
Run Code Online (Sandbox Code Playgroud)
let expiryDate = new Date(new Date().setHours(new Date().getHours() + 2));
or
let expiryDate2 = new Date(Date.now() + 2 * (60 * 60 * 1000) );
Run Code Online (Sandbox Code Playgroud)
我也认为原始对象不应该被修改.因此,为了节省未来的人力,这是基于Jason Harwig和Tahir Hasan答案的综合解决方案:
Date.prototype.addHours= function(h){
var copiedDate = new Date();
copiedDate.setTime(this.getTime() + (h*60*60*1000));
return copiedDate;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
429014 次 |
| 最近记录: |