首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >new Date () javascript未显示太平洋时区中的正确日期

new Date () javascript未显示太平洋时区中的正确日期
EN

Stack Overflow用户
提问于 2013-05-31 19:24:44
回答 1查看 2.1K关注 0票数 0

下面的代码在不同的时区/位置上的工作方式不同。

在印度,在我的办公桌前,它工作得很好

代码语言:javascript
复制
var sdate =  new Date("2013-12-12");
document.write(sdate)

如下所示

清华2013年12月12日05:30:00 GMT+0530 (印度标准时间)

这是正确的。

然而,当我在美国托管我的客户服务器时,相同的代码显示如下

2013年12月11日星期三格林尼治标准时间16:00:00 -0800(太平洋标准时间)

怎样才能在客户的主机上正确显示日期?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2013-05-31 22:44:17

JavaScript目前没有内置的标准对象来表示不带时间的日期。当您使用Date对象时,尽管它的名称是"date and time“,但您应该将其视为”date and time“对象,更接近于其他语言所称的DateTime。总会有一个隐含的时间成分,即使你没有提供。

Date对象的构造函数有几种不同的形式,这些形式因传入的参数而异。如果您传递一个字符串,它将尝试解析该字符串。但是,根据字符串包含的内容,效果可能会有所不同,并且不同的实现也会有所不同。

例如:

代码语言:javascript
复制
// This will be parsed as UTC at midnight (but doesn't work in IE8)
new Date("2013-05-31")

// This will be parsed as local time in Chrome, and cause "Invalid Date" in IE
new Date("2013-05-31 00:00:00")

// This will be parsed as local time at midnight, and usually works in all browsers, but is not standardized.
new Date("2013/05/31")

最后一个可能是可以接受的,但在我看来仍然是可疑的。大多数人不使用这种格式,他们更有可能输入mm/dd/yyyy或dd/mm/yyyy,这可能会导致歧义,这取决于区域性和您输入的日期。

将数值参数传递给Date构造函数可能会更好:

代码语言:javascript
复制
new Date(2013, 4, 31)

请注意,执行此操作时,月份将运行0-11,而不是1-12。因为我通过了一个4,所以这代表五月。这是常见的错误来源,因此请仔细观察。

我还应该提到的是,如果您使用诸如Moment.js之类的库,则可以消除所有浏览器变体并支持任何您想要的格式。例如:

代码语言:javascript
复制
// This will be parsed as local time
moment('2013-05-31','YYYY-MM-DD')

// This will be parsed as UTC
moment.utc('2013-05-31','YYYY-MM-DD')

还有许多其他很好的日期/时间库。如果您需要支持较旧的浏览器,那么Moment是一个很好的选择。但是,如果您主要支持现代浏览器,那么可以尝试使用Luxondate-fns

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16856168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档