Я выбираю дату и время в javascript, а затем хочу сохранить их на сервере (.NET). Даты должны быть в будущем с текущего момента (поэтому они не будут раньше 1970 года). Прочитав темы здесь, на SO, я узнал, что лучше хранить дату в виде строки, и люди предлагают использовать Date.prototype.toISOString()
или Date.prototype.toUTCString()
. Я читал, что toISOString()
недоступен в IE 7. И я хотел бы знать другие различия, когда я должен выбрать ту или иную функцию.
В чем разница между датой и временем в форматах ISO 8601 и UTC в javascript?
Ответы (3)
Они для разных целей.
- UTC – это основной стандарт времени, по которому мир регулирует часы и время.
- ISO — время стандартного формата. ISO также поддерживает
ms
в своем формате.
Поэтому, если вы хотите отправить данные на сервер, отправьте ISO
, потому что ISO
является стандартным форматом:
var date = new Date();
sendDate(date.toISOString());
Вы также можете использовать toISOString
в IE7 polyfill а>.
Я надеюсь, что это будет полезно для вас.
Краткая информация о toISOString()
:-
Метод toISOString()
возвращает строку в формате ISO (расширенный формат ISO 8601), которую можно описать следующим образом: YYYY-MM-DDTHH:mm:ss.sssZ
. Часовой пояс всегда UTC, что обозначается суффиксом «Z».
См. ссылку ниже для получения дополнительной информации о toISOString()
.
Краткая информация о toUTCString()
:-
Метод toUTCString()
преобразует дату в строку, используя часовой пояс UTC.
См. ссылку ниже для получения дополнительной информации о toUTCString()
Всегда используйте .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()
, который, по крайней мере, перейдет на летнее время, когда это уместно.