在Javascript中修改ISO日期

在Javascript中修改ISO日期,javascript,date,isodate,Javascript,Date,Isodate,我使用以下命令在Javascript程序中创建几个ISO日期: var isodate=new Date().toISOString() 它以“2014-05-15T16:55:56.730Z”的格式返回日期。我需要从每个日期中减去5小时。然后将上述日期的格式设置为“2014-05-15T11:55:56.730Z” 我知道这有点不对劲,但如果能快速修复,我将不胜感激。一个解决方案是在将日期转换为字符串之前修改日期 var date = new Date(); date.setHours(dat

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

var isodate=new Date().toISOString()

它以
“2014-05-15T16:55:56.730Z”
的格式返回日期。我需要从每个日期中减去5小时。然后将上述日期的格式设置为“2014-05-15T11:55:56.730Z”


我知道这有点不对劲,但如果能快速修复,我将不胜感激。

一个解决方案是在将日期转换为字符串之前修改日期

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

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

要实现更完整、更强大的日期管理,我建议您签出。

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

如果没有,则:

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();

对于复杂的日期操作和增强的浏览器兼容性,我强烈建议使用,尤其是当您要执行多个操作时。例如:

var fiveHoursAgo = moment().subtract( 5, 'hours' ).toISOString();
这是完美的。你可以做:

var date = new Date();
var newDate = moment(date).subtract('hours', 5)._d //to get the date object
var isoDate = newDate.toISOString();

修改日期对象的方法是通过函数,例如,不管您随后用于显示日期的格式如何。这应该起作用:

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

谢谢你,我会接受你的方法!如果愿意,您当然可以使用moment.js或Date.js之类的库,但使用标准JavaScript很容易做到这一点。不管怎样,你修改小时数的方式与日期的格式无关(比如你的例子中的ISO);这是相当古老的。它对你不起作用吗?是的,不推荐使用,现在略有不同。
moment().subtract(5,'hours').toISOString()