在js中创建一个忽略时区的日期

时间:2015-09-05 00:29:25

标签: javascript date datepicker timezone

是否可以在js中创建一个不受时区影响的日期对象? 例如,我想设置年份" 2015",月份" 03"和那天" 31"。

var ex = new Date(2015,3,31);

如果我"打印"这个变量现在看起来像这样:

Fri May 01 2015 00:00:00 GMT+0200 (ora legale Europa occidentale)

它会改变到第二天。可以避免吗?如何创建在每个时区始终相同的Date对象?

我需要在应用程序asap中包含此行为,因为我们必须使用与日期对象一起使用的datepicker插件(Bootstrap),因此我无法使用Strings。

提前致谢

2 个答案:

答案 0 :(得分:0)

简短的回答是你不能。

Date对象只是系统时间设置的访问者(因此它将使用本地计算机时区)。然后,您可以通过使用getTimezoneOffset()减去本地时区来操纵日期,或者使用setUTCHours()强制执行时间。

但是,如果您只能通过appcation欢迎一个TimeZone,则可以使用moment.js在该特定时区获取日期时间:

moment().tz("America/Los_Angeles").format();

答案 1 :(得分:0)

是的!如果使用Date.UTC函数创建所有Date对象,则它们都将相对于标准UTC时区,即使用户的浏览器设置了不同的时区。

例如:

var ex = new Date( Date.UTC( 2015, 3, 31 ) );

这将为3/31/2015 UTC创建一个Date对象,并在所有浏览器中保持一致,无论其默认时区如何。

在内部,ex内的日期仍会在用户的本地时区内转换。因此,如果您从中读取值,请说出日期,它将相对于用户的浏览器时间。

因此,如果您需要以UTC格式读取时间,可以执行以下操作:

ex.getUTCYear(); // 2015
ex.getUTCMonth(); // 3
ex.getUTCDate(); // 31

这将以UTC时间为您提供值。