Как я могу преобразовать строку в дату в JavaScript?
var st = "date in some format"
var dt = new date();
var dt_st= //st in date format same as dt
javascript
date
type-conversion
date-parsing
jslearner
источник
источник
Date -> String
илиString -> Date
?Ответы:
Наилучшим форматом строки для разбора строки является формат ISO даты вместе с конструктором объекта JavaScript Date.
Примеры формата ISO:
YYYY-MM-DD
илиYYYY-MM-DDTHH:MM:SS
.Но ждать! Просто использование «формата ISO» само по себе не работает надежно. Строка иногда анализируется как UTC, а иногда как местное время (в зависимости от поставщика и версии браузера). Лучше всего всегда хранить даты в формате UTC и производить вычисления в формате UTC.
Чтобы разобрать дату в формате UTC, добавьте Z - например
new Date('2011-04-11T10:20:30Z')
.Чтобы отобразить дату в формате UTC, используйте
.toUTCString()
,чтобы отобразить дату по местному времени пользователя, используйте
.toString()
.Больше информации о MDN | Дата и этот ответ .
Для старых Internet Explorer , совместимости (версии IE менее 9 не поддерживает формат ISO в Date конструктору), вы должны разделить DATETIME строковое представление на его детали , а затем вы можете использовать конструктор с использованием даты - времени частей, например:
new Date('2011', '04' - 1, '11', '11', '51', '00')
. Обратите внимание, что число месяца должно быть на 1 меньше.Альтернативный метод - используйте соответствующую библиотеку:
Вы также можете воспользоваться библиотекой Moment.js, которая позволяет анализировать дату с указанным часовым поясом.
источник
new Date('2011-04-11T11:51:00')
дата создания действительна.new Date('1970-30-02')
недопустимая дата, потому что в году нет 30 месяцев. Вы не можете переполнить месяцы, но когда вы переполняете дни, это разрешается в Chrome и Firefox в допустимую дату:new Date('1970-02-30')
это тот же день, что и новая дата ('1970-03-02').К сожалению, я узнал, что
возвращает «ср 02 апреля 2014». Я знаю, это звучит безумно, но это случается с некоторыми пользователями.
Решение пуленепробиваемое состоит в следующем:
источник
yyyy-MM-dd
анализируются как UTC, и toString возвращает местное время, поэтому в зависимости от часового пояса пользователя он может определенно возвращать разные результаты. Если вы всегда хотите установить время в формате UTC, вам следует использовать toUTCString .И вывод будет:
источник
источник
.indexOf()
методу, так как он не совместим с разными браузерами без полифайлов. Вместо этого используйте более совместимые.match()
или.test()
ванильные методы JS.var _delimiter = _format.match(/\W/g)[0];
в начало функции, вы можете автоматически получить разделитель и предварительно найти 3-й параметр.moment.js ( http://momentjs.com/ ) - это полный и удобный пакет для дат использования и поддерживает строки ISO 8601 .
Вы можете добавить строку даты и формата.
И вы можете проверить, если дата действительна.
Некоторые примеры отображения
Смотрите документацию http://momentjs.com/docs/#/parsing/string-format/
источник
let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL'))
: «3 месяца назад | 1 февраля 2019 года»Передайте это как аргумент Date ():
Вы можете получить доступ дату, месяц, год , используя, например:
dt.getMonth()
.источник
console.log(new Date('30-08-2018'))
и получаю недопустимую дату01/02/2020
на моем компьютере (в Великобритании), он вернется 1 февраля, и, как если бы то же самое было сделано в США, он вернется 2 января. Вы никогда не должны использовать эту наивную реализацию. Вместо этого используйте момент .Если вы можете использовать потрясающую библиотеку моментов (например, в проекте Node.js), вы можете легко проанализировать дату, используя, например,
и может получить доступ к объекту даты JS через
источник
new Date(2000, 10, 1)
даст вам "ср 01 ноября 2000 00:00:00 по Гринвичу + 0100 (CET)"Смотрите, что 0 за месяц дает вам январь
источник
Для тех, кто ищет крошечное и умное решение:
Пример:
источник
Просто
new Date(st);
Предполагая, что это правильный формат .
источник
Если вы хотите конвертировать из формата "дд / мм / гггг". Вот пример:
Это решение работает в версиях IE менее 9.
источник
Метки времени должны быть приведены к числу
источник
undefined
стоимости? Нравитсяvar date = new Date(undefined)
:?Date.parse
почти получает то, что вы хотите. Он задыхается наam
/pm
часть, но с некоторым взломом вы можете заставить его работать:источник
Преобразовать в формат pt-BR:
Я надеюсь помочь кому-нибудь !!!
источник
Я создал для этого скрипку, вы можете использовать функцию toDate () для любой строки даты и указать формат даты. Это вернет вам объект Date. https://jsfiddle.net/Sushil231088/q56yd0rp/
источник
Для преобразования строки на сегодняшний день в JS я использую
http://momentjs.com/
источник
Я сделал эту функцию для преобразования любого объекта Date в объект UTC Date.
источник
Еще один способ сделать это:
источник
Вы можете попробовать это:
источник
или
строка даты в формате '01 -01-1970' не будет работать в FireFox, поэтому лучше использовать «/» вместо «-» в строке формата даты.
источник
Если вам нужно проверить содержимое строки перед преобразованием в формат даты:
источник
Я создал функцию parseDateTime для преобразования объекта строки в дату, и она работает во всех браузерах (включая браузер IE), проверьте, если кто-то требуется, обратитесь к https://github.com/Umesh-Markande/Parse-String-to-Date -в-все-браузер
источник
Этот ответ основан на ответе Кассема, но он также обрабатывает двузначные годы. Я внес изменение в ответ Кассема, но в случае, если оно не было одобрено, я также отправляю его как отдельный ответ.
источник
Вы можете использовать регулярное выражение для анализа строки, чтобы детализировать время, затем создать дату или любой другой формат возврата, например:
источник
Представление
Сегодня (2020.05.08) я выполняю тесты для выбранных решений - для двух случаев: дата ввода - строка ISO8601 (Ad, Bd, Cd, Dd, Ed), а дата ввода - метка времени (At, Ct, Dt). Решения Bd, Cd, Ct не возвращают объект Date в качестве результатов, но я добавляю их, потому что они могут быть полезны, но я не сравниваю их с действительными решениями. Эти результаты могут быть полезны для массивного анализа даты.
Выводы
new Date
(Ad) в 50-100 раз быстрее, чем moment.js (Dd) для всех браузеров для даты и времени ISO.new Date
(Ad) примерно в 10 раз быстрее, чемparseDate
(Ed)Date.parse
(Bd) является самым быстрым, если нужно получить метку времени от даты ISO во всех браузерахподробности
Я выполняю тестирование на MacOs High Sierra 10.13.6 на Chrome 81.0, Safari 13.1, Firefox 75.0. Решение
parseDate
(Ed) использоватьnew Date(0)
и вручную установить компоненты даты UTC.Показать фрагмент кода
Результаты для хрома
источник
Строки даты в соответствии с ISO 8601, как и стандарт, все еще не получили широкого распространения.
Это отличный ресурс, чтобы выяснить, какой формат строки даты вы должны использовать:
http://dygraphs.com/date-formats.html
Да, это означает, что ваша строка даты может быть такой же простой, как и
"2014/10/13 23:57:52"
вместо"2014-10-13 23:57:52"
источник
источник
используйте этот код: (моя проблема была решена с этим кодом)
}
источник
Я написал функцию многоразового использования, которую я использую, когда я получаю строки даты с сервера.
Вы можете передать желаемый разделитель (/ - и т. д.), который разделяет день, месяц и год, чтобы использовать
split()
метод.Вы можете увидеть и проверить это на этом рабочем примере .
источник
Еще один способ сделать это - создать регулярное выражение с именованными группами захвата поверх строки формата, а затем использовать это регулярное выражение для извлечения дня, месяца и года из строки даты:
источник