9

我正在使用以下命令在 Javascript 程序中创建几个 ISO 日期:

var isodate = new Date().toISOString()

它以 . 格式返回日期"2014-05-15T16:55:56.730Z"。我需要从每个日期中减去 5 个小时。上述日期将被格式化为"2014-05-15T11:55:56.730Z"

我知道这很hacky,但非常感谢快速修复。

4

5 回答 5

21

一种解决方案是在将日期转换为字符串之前对其进行修改。

var date = new Date();
date.setHours(date.getHours() - 5);

// now you can get the string
var isodate = date.toISOString();

要获得更完整和强大的日期管理,我建议查看momentjs

于 2014-05-15T17:12:11.477 回答
3

你必须从字符串中减去小时数吗?

如果没有,那么:

var date= new Date();
date.setHours(isodate.getHours() - 5);
var isoDate = new Date().toISOString();

如果您确实必须使用字符串,我仍然很想这样做:

var date= new Date("2014-05-15T16:55:56.730Z");
date.setHours(isodate.getHours() - 5);
var isoDate = new Date().toISOString();
于 2014-05-15T17:13:23.670 回答
1

对于复杂的日期操作和增强的浏览器兼容性,我强烈建议使用moment.js,特别是如果您要执行多个操作。例子:

var fiveHoursAgo = moment().subtract( 5, 'hours' ).toISOString();
于 2014-05-15T17:14:05.270 回答
1

修改 Date 对象的方法是通过诸如Date.setHours之类的函数,而不管您随后用于显示日期的格式如何。这应该有效:

var theDate = new Date();
theDate.setHours(theDate.getHours() - 5);
var isodate = theDate.toISOString();
于 2014-05-15T17:16:49.747 回答
-1

Moment.js非常适合这个。你可以做:

var date = new Date();
var newDate = moment(date).subtract('hours', 5)._d //to get the date object
var isoDate = newDate.toISOString();
于 2014-05-15T17:14:57.420 回答