新的Date()javascript在太平洋时区没有显示正确的日期

问题描述 投票:0回答:1

下面的代码在不同的时区/位置有不同的作用。

在印度,我的办公桌很完美

var sdate =  new Date("2013-12-12");
document.write(sdate)

如下所示

Thu Dec 12 2013 05:30:00 GMT + 0530(印度标准时间)

哪个是对的。

但是,当我在美国托管我的客户端服务器时,相同的代码如下所示

Wed Dec 11 2013 16:00:00 GMT-0800(太平洋标准时间)

如何在客户主机中正确显示日期?

提前致谢

javascript timezone date-format
1个回答
0
投票

JavaScript目前没有内置的标准对象来代表没有时间的日期。当您使用Date对象时,尽管它的名称,您应该将其视为“日期和时间”对象,更接近其他语言称为DateTime。总有一个隐含的时间组件,即使您没有提供。

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

例如:

// 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构造函数:

new Date(2013, 4, 31)

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

我还应该提一下,如果你使用像Moment.js这样的库,你可以消除所有的浏览器变体并支持你想要的任何格式。例如:

// 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

© www.soinside.com 2019 - 2024. All rights reserved.