新日期()javascript在太平洋时区中未显示正确的日期

新日期()javascript在太平洋时区中未显示正确的日期,javascript,timezone,date-format,Javascript,Timezone,Date Format,下面的代码在不同的时区/地点工作方式不同 在印度,在我的办公桌上,它工作得非常好 var sdate = new Date("2013-12-12"); document.write(sdate) 如下所示 2013年12月12日星期四05:30:00 GMT+0530(印度标准时间) 这是正确的 然而,当我在美国托管到我的客户机服务器时,它显示如下所示 2013年12月11日星期三16:00:00 GMT-0800(太平洋标准时间) 如何在客户端主机中正确显示日期 提前感谢JavaScri

下面的代码在不同的时区/地点工作方式不同

在印度,在我的办公桌上,它工作得非常好

var sdate =  new Date("2013-12-12");
document.write(sdate)
如下所示

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

这是正确的

然而,当我在美国托管到我的客户机服务器时,它显示如下所示

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

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


提前感谢

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")
// 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')
最后一个可能是可以接受的,但对我来说还是可疑的。大多数人不使用这种格式,他们更可能输入mm/dd/yyyy或dd/mm/yyyy,这可能会导致歧义,具体取决于您输入的文化和日期

您最好将数字参数传递给
Date
构造函数:

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

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

// 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")
// 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是一个不错的选择。但是,如果您主要支持现代浏览器,请尝试使用或。

定义“正确”。现在它显示了同一时间段的本地表示(根据时区的指示进行移动)。如果您想要的是本地“开始日期”点,请使用
新日期('2013/12/12 00:00:00')
。@RobG-谢谢。旧答案,我更新了正确的术语。