почему дата недействительна в JavaScript? - PullRequest
1 голос
/ 04 февраля 2011

Почему следующее выражение недопустимо?

var hello = new Date(2010, 11, 17, 0, 0, 0, 0);

Например, hello.UTC() не работает.

Ответы [ 3 ]

4 голосов
/ 04 февраля 2011
var hello = new Date(2010, 11, 17, 0, 0, 0, 0);
console.log(hello.toUTCString());

и

var hello2 = Date.UTC(2010, 11, 17, 0, 0, 0, 0);
console.log(hello2);

На самом деле это две разные функции, которые распечатывают разные вещи.

toUTCString() - Преобразует объект Date в строку в соответствии с универсальным временем

, где

Date.UTC() - возвращает количество миллисекунд в строке даты сполночь 1 января 1970 года по всемирному времени.

Если вы пытаетесь вычислить миллисекунды в строке даты, начиная с полуночи 1-1-1970, вам придется использовать Date.UTC();.Однако, если вы пытаетесь получить свойства в различных формах новой даты (2010, 11, 17, 0, 0, 0, 0);тогда вам придется использовать его собственные методы конструктора (toUTCString() или getUTCMilliseconds() и т. д.).

UTC является членом самого конструктора Date, а не членом экземпляров Date.Итак, чтобы вызвать UTC, вы должны использовать Date.UTC(); Date(), преобразующее текущее время в строку, в соответствии с универсальным временем, а Date.UTC() извлекает и использует значение, которое рассчитывается в миллисекундах с 1 января 1970 года 00:00:00 Всемирное время (UTC).Итак, они похожи на «статические» функции.

Более того, в JavaScript, когда вы используете ключевое слово 'new' для создания нового объекта (создания экземпляра), значение конструктора this указывает на новый объект.Таким образом, hello может иметь свою собственную дату, в отличие от Date() или Date.UTC(), this будет указывать на другую область видимости (глобальную, я думаю), которая будет выполнять вычисления на основе 1-1-1970 00: 00: 00 или вернуть время, когда вызывается функция Date.Объект hello, с другой стороны, будет иметь базовую дату, которая была создана с new Date(2010, 11, 17, 0, 0, 0, 0) с его набором созданных методов (toUTCString(); и т. Д.).Новая дата с this указывает на новый объект, используя переданные свойства в качестве базового значения «дата».

С учетом всего сказанного, hello.UTC() обращается к функции, которая не является членом ее конструктора и, следовательно, не работает.Это часть ООП в JavaScript.Это все на моей голове и, возможно, немного нечетко, если вы читаете это.Пожалуйста, исправьте меня, если у меня есть ошибки.

3 голосов
/ 04 февраля 2011

Поскольку UTC является статическим методом Дата, вы всегда используете его как Date.UTC (), а не как метод даты объект, который вы создали.

Источник: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/UTC

1 голос
/ 05 февраля 2011

Это работает для меня:

var hello = new Date(2010, 11, 17, 0, 0, 0, 0);
window.alert( hello.toUTCString() );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...