2015-09-05 60 views
2

js中可能创建不受时区影响的日期对象吗? 例如,我想设置年份“2015”,月份“03”和日期“31”。在js中创建日期以忽略时区

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

如果我“打印”这个变量,现在看来是这样的:

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

它改变到第二天。有可能避免这种情况?我如何创建一个每个时区都一样的Date对象?

我需要将这种行为包含在应用程序中,我不能仅仅使用字符串,因为我们必须使用与日期对象一起使用的datepicker插件(Bootstrap)。

在此先感谢

+0

从3月份开始的月份是4月份,仅有30天,这就是为什么它会在第二天更改。 –

+0

[这里是Date类的MDN文档。](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) – Pointy

回答

0

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

例如:

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

这将创建一个Date对象3/31/2015 UTC和横跨无论其默认时区的所有浏览器一致的。

在内部,ex内部的日期仍将在用户的本地时区中转换。所以如果你从中读取数据,说出日期,这将是相对于用户的浏览器时间。

所以,如果你需要阅读的时候回来了UTC,那么你可以做这样的事情:

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

这会给你值回UTC时间。

+0

我已经试过你的解决方案,现在在Chrome控制台,仍然给我回2015,4,1不2015,3,31 :( –

+0

非常感谢你!我们做到了!爱你!ahah;) –

+0

月份是0-11,而不是1-12。 –

0

简短的回答是你不能。

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

但是,如果你能欢迎只有一个时区翻过你的applcation,你可以在那个paticular时区使用moment.js获取日期时间:

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

+1

除了*可以*使用UTC本地Date原型上的API,您可以使用'Date.UTC()'来构造一个不含时区偏移的日期。 – Pointy

+0

不,它不工作,当我设置'Date.UTC(2015,3,31)'年,月和日'我得到了4月的第一个,同样的行为。 –