假设您网站的用户输入了一个日期范围。

2009-1-1 to 2009-1-3

您需要将此日期发送到服务器进行某些处理,但服务器要求所有日期和时间均为UTC。

现在假设用户在阿拉斯加。由于它们所处的时区与UTC完全不同,因此需要将日期范围转换为如下所示:

2009-1-1T8:00:00 to 2009-1-4T7:59:59

使用JavaScriptDate对象,如何将第一个“本地化”日期范围转换为服务器能够理解的内容?


当前回答

date = '2012-07-28'; stringdate = new Date(date).toISOString();

应该可以在大多数更新的浏览器中工作。在Firefox 6.0上返回2012-07-28T00:00:00.000Z

其他回答

toISOString()方法返回简化扩展ISO格式的字符串格式(ISO 8601),总是24或27个字符长(YYYY-MM-DDTH:MM:ss.sssZ或±YYYY-MM-dDTH:MM:ss.sssZ,分别)。时区始终为零UTC偏移,如后缀“Z”。

来源:MDN网络文档

您需要的格式是用.toISOString()方法创建的。对于本机不支持此方法的旧浏览器(ie8及以下版本),可以在此处找到垫片:

这将使您能够执行所需的操作:

var isoDateString=新日期().toISOString();console.log(isoDateString);

对于时区工作,moment.js和moment.jstimezone是非常宝贵的工具。。。特别是用于在客户端和服务器javascript之间导航时区。

如果你经常与日期打交道,那么使用moment.js是值得的(http://momentjs.com). 转换为UTC的方法为:

moment(yourTime).utc()

您可以使用格式将日期更改为所需的任何格式:

moment(yourTime).utc().format("YYYY-MM-DD")

当前也有偏移选项,但有一个额外的补充库用于处理时区(http://momentjs.com/timezone/). 时间转换如下所示:

moment.tz(yourUTCTime, "America/New_York")
var myDate = new Date(); // Set this to your date in whichever timezone.
var utcDate = myDate.toUTCString();
var userdate = new Date("2009-1-1T8:00:00Z");
var timezone = userdate.getTimezoneOffset();
var serverdate = new Date(userdate.setMinutes(userdate.getMinutes()+parseInt(timezone)));

这将为您提供正确的UTC日期和时间。这是因为getTimezoneOffset()将以分钟为单位提供时区差异。我建议您不要使用toISOString(),因为输出将在字符串中。因此,将来您将无法操纵日期

到目前为止,我发现获取GMT时间的最佳方法是首先获取您的本地日期时间。然后转换为GMT字符串。然后使用该字符串通过删除时区来构建新时间。

let dtLocal = new Date()
let dt = new Date(dtLocal.toISOString().split('Z')[0])

注意:-它将以GMT创建新的日期时间。但它将是本地日期时间,因为时区将附加到它。