我希望服务器始终在 HTML 中以 UTC 格式提供日期,并让客户端站点上的 JavaScript 将其转换为用户的本地时区。
如果我可以以用户的语言环境日期格式输出,那就再好不过了。
我希望服务器始终在 HTML 中以 UTC 格式提供日期,并让客户端站点上的 JavaScript 将其转换为用户的本地时区。
如果我可以以用户的语言环境日期格式输出,那就再好不过了。
似乎从 UTC 日期开始的最简单的方法是创建一个新Date
对象并使用setUTC…
方法将其设置为您想要的日期/时间。
然后各种toLocale…String
方法将提供本地化的输出。
// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);
console.log(d); // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
console.log(d.toLocaleString()); // -> Sat Feb 28 23:45:26 2004
console.log(d.toLocaleDateString()); // -> 02/28/2004
console.log(d.toLocaleTimeString()); // -> 23:45:26
最好按如下方式从 UTC解析您的日期字符串(在服务器上创建一个ISO-8601兼容字符串以在所有浏览器中获得一致的结果):
var m = moment("2013-02-08T09:30:26Z");
现在只需m
在您的应用程序中使用,moment.js 默认使用本地时区进行显示操作。有多种方法可以格式化日期和时间值或提取其中的一部分。
你甚至可以像这样在用户语言环境中格式化一个 moment 对象:
m.format('LLL') // Returns "February 8 2013 8:30 AM" on en-us
要将 moment.js 对象转换为不同的时区(即既不是本地时区也不是 UTC),您需要moment.js 时区扩展名。该页面还有一些示例,使用起来非常简单。
注意:Moment JS 推荐更现代的替代方案,因此它可能不是新项目的好选择。
您可以使用new Date().getTimezoneOffset()/60
时区。还有toLocaleString()
一种使用用户的语言环境显示日期的方法。
这是整个列表:使用日期
在 JS 中,除了如上所述转换每个属性之外,没有简单和跨平台的方法来格式化本地日期时间。
这是我用来获取本地 YYYY-MM-DD 的快速技巧。请注意,这是一个 hack,因为最终日期将不再具有正确的时区(因此您必须忽略时区)。如果我还需要其他任何东西,我会使用 moment.js。
var d = new Date();
d = new Date(d.getTime() - d.getTimezoneOffset() * 60000)
var yyyymmdd = t.toISOString().slice(0,0);
// 2017-05-09T08:24:26.581Z (but this is not UTC)
d.getTimezoneOffset() 以分钟为单位返回时区偏移量,而 d.getTime() 以毫秒为单位,因此 x 60,000。
构建日期对象后,以下是转换的片段:
该函数采用 UTC 格式的 Date 对象和格式字符串。
您将需要一个Date.strftime
原型。
function UTCToLocalTimeString(d, format) {
if (timeOffsetInHours == null) {
timeOffsetInHours = (new Date().getTimezoneOffset()/60) * (-1);
}
d.setHours(d.getHours() + timeOffsetInHours);
return d.strftime(format);
}