Я выбираю дату и время в 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(), который, по крайней мере, перейдет на летнее время, когда это уместно.