В чем разница между датой и временем в форматах ISO 8601 и UTC в javascript?

Я выбираю дату и время в javascript, а затем хочу сохранить их на сервере (.NET). Даты должны быть в будущем с текущего момента (поэтому они не будут раньше 1970 года). Прочитав темы здесь, на SO, я узнал, что лучше хранить дату в виде строки, и люди предлагают использовать Date.prototype.toISOString() или Date.prototype.toUTCString(). Я читал, что toISOString() недоступен в IE 7. И я хотел бы знать другие различия, когда я должен выбрать ту или иную функцию.


person myroman    schedule 23.01.2014    source источник


Ответы (3)


Они для разных целей.

  • UTC – это основной стандарт времени, по которому мир регулирует часы и время.
  • ISO — время стандартного формата. ISO также поддерживает ms в своем формате.

Поэтому, если вы хотите отправить данные на сервер, отправьте ISO, потому что ISO является стандартным форматом:

var date = new Date();
sendDate(date.toISOString());

Вы также можете использовать toISOString в IE7 polyfill .

person Pinal    schedule 23.01.2014

Я надеюсь, что это будет полезно для вас.

Краткая информация о toISOString() :-

Метод toISOString() возвращает строку в формате ISO (расширенный формат ISO 8601), которую можно описать следующим образом: YYYY-MM-DDTHH:mm:ss.sssZ. Часовой пояс всегда UTC, что обозначается суффиксом «Z».

См. ссылку ниже для получения дополнительной информации о toISOString().

Date.prototype.toISOString()

Краткая информация о toUTCString() :-

Метод toUTCString() преобразует дату в строку, используя часовой пояс UTC.

См. ссылку ниже для получения дополнительной информации о toUTCString()

Date.prototype.toUTCString()

person Govinda Rajbhar    schedule 23.01.2014
comment
Что обеспечивает точное время с миллисекундами. Так как время C # и javascripte Date отличается, что лучше использовать? - person Shanmu_92; 06.05.2019

Всегда используйте .toISOString()

Они дают практически одну и ту же информацию, но в разных форматах. Вот что я получаю на своей машине.

new Date().toISOString()
"2019-10-11T18:56:08.984Z"

new Date().toUTCString()
"Fri, 11 Oct 2019 18:56:08 GMT"

Есть 4 причины, по которым .toISOString() вам чаще хочется, чем .toUTCString().

А. Более удобная сортировка

При сортировке по алфавиту шаблон 2019-10-11T18:56:08.984Z числа .toISOString() дает правильный порядок дат.

B. Миллисекундная точность

.toISOString() предоставляет значения в миллисекундах, а .toUTCString() — нет.

C. Любой пользователь может правильно интерпретировать

Значение .toUTCString() может быть более знакомо конечным пользователям, но только в том случае, если им подходят языковые настройки. Напротив, .toISOString() одинакова независимо от языковых настроек.

D. Воспроизводимо регенерируется программным обеспечением

Вы можете легко преобразовать строку даты ISO в объект даты Javascript, а затем снова создать точно такую ​​же строку. Это не зависит от того, кто дал вам строку даты ISO, где находится сервер и где вы находитесь.

Это не верно автоматически для строки UTC. Например, если второй экземпляр вашей системы приложений работает в другом часовом поясе или на другом языке, он .toUTCstring() может использовать другие числа или слова (соответственно) для представления одного и того же момента времени. Ему будет сложно создать строку UTCString, совпадающую с тем, что было создано первым экземпляром приложения, поскольку, как правило, оно не будет знать язык или часовой пояс, в котором была создана первая строка UTC.

Я думаю, никому не нужен .toUTCString()

I don't know why `.toUTCString()` exists. Its word-heavy format makes it useless for internal storage of dates in your program, because it varies depending on your language and timezone setting etc.

Так может быть, нужно создать что-то приятное для внешнего отображения для пользователя? Ну не совсем. Любой, кто не находится в лондонском часовом поясе, не найдет это очень полезным.

Я живу в Лондоне. И даже я, даже если бы я писал приложение исключительно для себя, исключительно в своей системе и только у себя дома, все равно не хотел бы использовать .toUTCString(). Потому что он показывает UTC (также известный как GMT). Лондон не всегда находится по Гринвичу. Летом мы переходим на GMT+1, поэтому результат .toUTCString() может ввести в заблуждение любого, кто не замечает GMT и настраивает время в уме.

Если бы мне нужно было время на естественном языке, чтобы некомпьютерным пользователям было удобно, я бы сконструировал его вручную из частей, используя такую ​​библиотеку, как moment.js. Если бы мне нужно было быстрое и грязное решение, я бы использовал .toString(), который, по крайней мере, перейдет на летнее время, когда это уместно.

person Eureka    schedule 11.10.2019