2015-09-05 4 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

Месяцы начинаются с 0. 3 апреля, и у него есть только 30 дней, поэтому он меняется на следующий день. –

+0

[Вот документация MDN для класса Date.] (Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date) – Pointy

ответ

0

Да! Если вы создадите все свои объекты Date с помощью функции Date.UTC, все они будут относиться к стандартному часовому поясу 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

Я пробовал ваше решение сейчас в хром-консоли, все еще возвращает мне 2015,4,1, а не 2015,3,31 :( –

+0

Большое вам спасибо! Мы сделали это! Love u!ahah;) –

+0

Месяцы 0-11, а не 1-12. –

0

Короткий ответ: вы не можете.

Объект Date является только аксессуаром к системным настройкам времени (так что он будет использовать часовой пояс локального компьютера в любом случае). Затем вы можете манипулировать своими датами, выбирая локальный часовой пояс с помощью getTimezoneOffset() или заставляя время с помощью setUTCHours().

Однако, если вы можете только приветствовать один TimeZone accross вашего applcation, вы можете получить время даты в том paticular часового пояса с помощью moment.js:

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

+1

За исключением того, что вы * можете * использовать UTC API на прототипе родной даты, и вы можете использовать 'Date.UTC()' для построения даты без смещения часового пояса, которая неявно задействована. – Pointy

+0

Нет, он не работает, когда я установил год, месяц и день с «Date.UTC (2015,3,31)», я получил первое апреля, такое же поведение. –

Смежные вопросы