我希望服务器始终在超文本标记语言中使用UTC格式的日期,并让客户端站点上的JavaScript将其转换为用户的本地时区。
如果我可以以用户的区域设置日期格式输出,则会获得奖励。
发布于 2014-05-26 22:58:26
你可以使用moment.js (2021年不推荐使用)
最好按如下方式从UTC中parse日期字符串(在服务器上创建一个与ISO-8601兼容的字符串,以便在所有浏览器上获得一致的结果):
var m = moment("2013-02-08T09:30:26Z");
现在只需在您的应用程序中使用m
,moment.js默认为显示操作的本地时区。它有many ways to format the date and time values或extract部分。
您甚至可以在用户区域设置中设置moment对象的格式,如下所示:
m.format('LLL') // Returns "February 8 2013 8:30 AM" on en-us
要将moment.js对象转换为不同的时区(即既不是本地时区,也不是协调世界时),您将需要moment.js timezone extension。该页面也有一些示例,使用起来非常简单。
注意: Moment JS推荐更现代的替代方案,因此它可能不是新项目的好选择。
发布于 2008-09-17 16:49:24
您可以使用new Date().getTimezoneOffset()/60
作为时区。还有一个toLocaleString()
方法可以使用用户的语言环境显示日期。
下面是完整的列表:Working with Dates
发布于 2017-05-09 14:52:57
在JS中,除了如上所述的转换每个属性之外,没有简单且跨平台的方法来格式化本地日期时间。
这是我用来获取本地YYYY-MM-DD的一个快速技巧。请注意,这是一个技巧,因为最终日期将不再具有正确的时区(因此您必须忽略时区)。如果我还需要其他东西,我会使用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()以ms为单位,因此x为60,000。
https://stackoverflow.com/questions/85116
复制相似问题