Я заметил, что new Date()
функция JavaScript очень умна в приеме дат в нескольких форматах.
Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")
Я не мог найти документацию, где бы ни были показаны все действительные форматы строк при вызове new Date()
функции.
Это для преобразования строки в дату. Если мы посмотрим на противоположную сторону, то есть на преобразование объекта даты в строку, до сих пор у меня сложилось впечатление, что в JavaScript нет встроенного API для форматирования объекта даты в строку.
Примечание редактора: следующий подход - это попытка автора, которая работала в конкретном браузере, но не работает вообще; см. ответы на этой странице, чтобы увидеть некоторые актуальные решения.
Сегодня я играл с toString()
методом на объекте date, и удивительно, что он служит для форматирования даты в строки.
var d1 = new Date();
d1.toString('yyyy-MM-dd'); //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy') //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome
Также здесь я не смог найти никакой документации о том, как мы можем отформатировать объект даты в строку.
Где находится документация, в которой перечислены спецификаторы формата, поддерживаемые Date()
объектом?
источник
Ответы:
Мне нравятся 10 способов форматирования времени и даты с использованием JavaScript и работы с датами .
По сути, у вас есть три метода, и вы должны объединить строки для себя:
Пример:
источник
Moment.js
Это (облегченная) * библиотека дат JavaScript для анализа, манипулирования и форматирования дат.
(*) облегченное значение, уменьшенное до 9,3 КБ + сжатый в минимальной возможной конфигурации (февраль 2014 г.)
источник
Если вы уже используете пользовательский интерфейс jQuery в своем проекте, вы можете использовать встроенный метод datepicker для форматирования объекта даты:
Однако средство выбора даты только форматирует даты и не может форматировать время.
Взгляните на jQuery UI datepicker formatDate , примеры.
источник
Я наткнулся на это сегодня и был весьма удивлен, что никто не нашел время, чтобы ответить на этот простой вопрос. Правда, есть много библиотек, которые могут помочь с манипулированием датами. Некоторые лучше, чем другие. Но это был не тот вопрос, который был задан.
AFAIK, чистый JavaScript не поддерживает спецификаторы формата так, как вы указали, что вы хотели бы их использовать . Но это методы поддержки для форматирования даты и / или времени, например
.toLocaleDateString()
,.toLocaleTimeString()
и.toUTCString()
.Date
Ссылка на объект я использую чаще всего находится на сайте w3schools.com (но быстрый поиск Google покажет , многое другое , что может лучше удовлетворять ваши потребности).Также обратите внимание, что в разделе « Свойства объекта Date » есть ссылка
prototype
, которая иллюстрирует некоторые способы расширения объекта Date с помощью пользовательских методов. В течение многих лет в сообществе JavaScript велись споры о том, является ли это наилучшей практикой, и я не выступаю за или против нее, а просто указываю на ее существование.источник
Пользовательская функция форматирования:
Для фиксированных форматов, простая функция сделать работу. В следующем примере создайте международный формат YYYY-MM-DD:
Примечание: однако, как правило, не стоит расширять стандартные библиотеки Javascript (например, добавляя эту функцию в прототип Date).
Более продвинутая функция может генерировать настраиваемый вывод на основе параметра формата. На этой же странице есть несколько хороших примеров.
Если написать функцию форматирования слишком долго, есть множество библиотек, вокруг которых это делается. Некоторые другие ответы уже перечисляют их. Но у растущих зависимостей есть и противоположность.
Стандартные функции форматирования ECMAScript:
Начиная с более поздних версий ECMAscript,
Date
класс имеет некоторые специфические функции форматирования:Примечание: из этих функций форматирования можно создать собственный вывод:
источник
Краткий ответ
Не существует «универсальной» документации, которая бы обслуживала javascript; каждый браузер с javascript действительно является реализацией. Тем не менее, существует стандарт, которому склонны следовать большинство современных браузеров, и это стандарт EMCAScript; Стандартные строки ECMAScript будут принимать, как минимум, модифицированную реализацию определения ISO 8601.
В дополнение к этому IETF предлагает второй стандарт, которому , как правило, следуют браузеры, - это определение временных меток, сделанное в RFC 2822. Актуальную документацию можно найти в списке ссылок внизу.
От этого вы можете ожидать базовой функциональности, но то, что «должно» быть, не является тем, что «есть». Я собираюсь немного углубиться в это с процедурной точки зрения, хотя, как представляется, только три человека фактически ответили на вопрос (а именно Скотт, goofballLogic и Пеллер), который, для меня, предполагает, что большинство людей не знают о том, что на самом деле происходит, когда вы создать объект Date.
Длинный ответ
Чтобы ответить на вопрос или, как правило, даже искать ответ на этот вопрос, вам нужно знать, что javascript не является новым языком; на самом деле это реализация ECMAScript и соответствует стандартам ECMAScript (но обратите внимание, javascript также предшествовал этим стандартам; стандарты EMCAScript построены на ранней реализации LiveScript / JavaScript). Текущий стандарт ECMAScript - 5.1 (2011); в то время, когда вопрос был задан изначально (июнь '09), стандартом было 3 (4 было отменено), но 5 было выпущено вскоре после публикации в конце 2009 года. Это должно обозначить одну проблему; какой стандарт может следовать реализация javascript, может не отражать то, что на самом деле на месте, потому что а) это реализация данного стандарта, б) не все реализации стандарта являются пуританскими,
По сути, когда вы имеете дело с javascript, вы имеете дело с производной (специфичной для браузера javascript) реализации (сам javascript). Например, в Google V8 реализован ECMAScript 5.0, но JScript Internet Explorer не пытается соответствовать какому-либо стандарту ECMAScript, однако Internet Explorer 9 действительно соответствует ECMAScript 5.0.
Когда одиночный аргумент передается в новый Date (), он вызывает этот прототип функции:
Когда два или более аргумента передаются в новый Date (), он вызывает этот прототип функции:
Обе эти функции должны выглядеть знакомо, но это не сразу отвечает на ваш вопрос, и то, что количественно определяется как приемлемый «формат даты», требует дальнейшего объяснения. Когда вы передаете строку в новый Date (), он вызывает прототип (обратите внимание, что я свободно использую слово prototype ; версии могут быть отдельными функциями или частью условного оператора в одной функции) для новая Дата (значение) с вашей строкой в качестве аргумента для параметра «значение». Эта функция сначала проверит, является ли это число или строка. Документацию по этой функции можно найти здесь:
Из этого мы можем сделать вывод, что для получения разрешенного форматирования строки для новой даты (значения) мы должны взглянуть на метод Date.parse (строка). Документацию по этому методу можно найти здесь:
И мы можем далее сделать вывод, что даты должны быть в измененном расширенном формате ISO 8601, как указано здесь:
Тем не менее, из опыта мы можем понять, что объект Date в javascript принимает другие форматы (в первую очередь, обусловленные существованием этого вопроса), и это нормально, потому что ECMAScript допускает использование определенных форматов реализации. Однако это по-прежнему не отвечает на вопрос о том, какая документация доступна в доступных форматах и какие форматы фактически разрешены. Мы рассмотрим реализацию Google JavaScript, V8; пожалуйста, обратите внимание, я не утверждаю, что это «лучший» движок JavaScript (как можно определить «лучший» или даже «хороший»), и нельзя предположить, что форматы, разрешенные в V8, представляют все форматы, доступные сегодня, но я думаю, что это справедливо предположить, что они соответствуют современным ожиданиям.
Глядя на функцию DateConstructor, мы можем сделать вывод, что нам нужно найти функцию DateParse; Тем не менее, обратите внимание, что «год» не является фактическим годом и является только ссылкой на параметр «год».
Это вызывает% DateParseString, который на самом деле является ссылкой на функцию времени выполнения для функции C ++. Это относится к следующему коду:
Вызов функции, который нас интересует в этой функции, предназначен для DateParser :: Parse (); игнорируйте логику, окружающую эти вызовы функций, это просто проверки на соответствие типу кодировки (ASCII и UC16). DateParser :: Parse определяется здесь:
Это функция, которая на самом деле определяет, какие форматы она принимает. По сути, он проверяет наличие стандарта EMCAScript 5.0 ISO 8601 и, если он не соответствует стандартам, попытается построить дату на основе устаревших форматов. Несколько ключевых моментов, основанных на комментариях:
Так что этого должно быть достаточно, чтобы дать вам общее представление о том, чего ожидать, когда дело доходит до передачи строки в объект Date. Более подробно об этом можно узнать, ознакомившись со следующей спецификацией, на которую указывает Mozilla в сети разработчиков Mozilla (соответствует меткам времени IETF RFC 2822):
В Microsoft Developer Network дополнительно упоминается дополнительный стандарт для объекта Date: ECMA-402, спецификация API интернационализации ECMAScript, которая дополняет стандарт ECMAScript 5.1 (и будущие). Это можно найти здесь:
В любом случае это должно помочь подчеркнуть, что не существует «документации», которая повсеместно представляет все реализации javascript, но все еще имеется достаточно документации, чтобы разумно понять, какие строки приемлемы для объекта Date. Довольно загруженный вопрос, когда вы думаете об этом, да? :П
источник
Обязательно проверяйте Datejs при работе с датами в JavaScript. Это довольно впечатляюще и хорошо документировано, как вы можете видеть в случае функции toString .
РЕДАКТИРОВАТЬ : Тайлер Форсайт указывает, что datejs устарела. Я использую его в своем текущем проекте, и у меня не было никаких проблем, однако вы должны знать об этом и рассмотреть альтернативы.
источник
Вы можете просто расширить
Date
объект новымformat
методом, как отметил meizz , ниже приведен код, данный автором. А вот и jsfiddle .источник
console.log(new Date('2014-06-01')) -> May
я думаю, что это как-то связано сФункциональность, которую вы цитируете, не является стандартным Javascript, вряд ли будет переносимой через браузеры и поэтому не является хорошей практикой. Спецификация ECMAScript 3 оставляет функцию синтаксического анализа и выходных форматов вплоть до реализации Javascript. ECMAScript 5 добавляет подмножество поддержки ISO8601. Я считаю, что функция toString (), которую вы упоминаете, является новшеством в одном браузере (Mozilla?)
Несколько библиотек предоставляют подпрограммы для параметризации, некоторые с расширенной поддержкой локализации. Вы также можете проверить методы в dojo.date.locale .
источник
Я сделал этот очень простой форматтер, он вырезан / n / pastable (обновлен с более новой версией):
http://snipplr.com/view/66968.82825/
источник
new DateFmt()
)Каркас бесплатный, ограниченный, но легкий
источник
DateJS, безусловно, полнофункциональный, но я бы порекомендовал эту намного более простую библиотеку (JavaScript Date Format), которую я предпочитаю просто, потому что это всего 120 строк или около того.
источник
Посмотрев несколько вариантов, представленных в других ответах, я решил написать свое собственное ограниченное, но простое решение, которое другие также могут найти полезным.
Пример использования:
источник
format = format.replace("YY", (""+date.getFullYear()).substring(2));
. Это становится уродливым - вы, вероятно, хотите пойти по маршруту RegEx или подобному.Вот функция, которую я часто использую. Результат: гггг-мм-дд чч: мм: сс.ннн.
источник
Вам может пригодиться эта модификация объекта даты, которая меньше любой библиотеки и легко расширяется для поддержки различных форматов:
НОТА:
КОД
ИСПОЛЬЗОВАНИЕ
источник
Просто чтобы продолжить твердый ответ gongzhitaao - это обрабатывает AM / PM
источник
Мне не удалось найти какой-либо определенной документации по допустимым форматам даты, поэтому я написал свой собственный тест, чтобы увидеть, что поддерживается в различных браузерах.
http://blarg.co.uk/blog/javascript-date-formats
Мои результаты пришли к выводу, что следующие форматы действительны во всех протестированных мной браузерах (в примерах используется дата «9 августа 2013»):
[Полный год] / [Месяц] / [Номер даты] - Месяц может быть числом с или без начального нуля или именем месяца в коротком или длинном формате, а номер даты может быть с или без начального нуля.
[Месяц] / [Полный год] / [Номер даты] - Месяц может быть числом с или без начального нуля или именем месяца в коротком или длинном формате, а номер даты может быть с или без начального нуля.
Любая комбинация [Полный год], [Имя месяца] и [Номер даты], разделенных пробелами - Название месяца может быть в коротком или длинном формате, а номер даты может быть с или без начального нуля.
Также действует в «современных браузерах» (или, другими словами, во всех браузерах, кроме IE9 и ниже)
[Полный год] - [Номер месяца] - [Номер даты] - Номер месяца и даты должен включать начальные нули (это формат, используемый типом даты MySQL )
Использование названий месяцев:
Интересно, что при использовании названий месяцев я обнаружил, что когда-либо используются только первые 3 символа названия месяца, поэтому все перечисленное ниже является абсолютно верным:
источник
Форматирование и особенно анализ дат в JavaScript могут быть немного головной болью. Не все браузеры обрабатывают даты одинаково. Поэтому, хотя полезно знать базовые методы, более практично использовать вспомогательную библиотеку.
Библиотека XDate Javascript по Adam Shaw был примерно с середины 2011 года и до сих пор в стадии активного развития. Он имеет фантастическую документацию, отличный API, форматирование, пытается оставаться обратно совместимым и даже поддерживает локализованные строки.
Ссылка на изменение строк локали: https://gist.github.com/1221376
источник
Пример кода:
Вывод:
источник
new Date();// = Fri Nov 22 2013 17:48:22 GMT+0100
выход с вышеуказанным кодом будет"16:48:22"
Библиотека sugar.js обладает отличным функционалом для работы с датами в JavaScript. И это очень хорошо задокументировано .
Несколько примеров:
источник
Все браузеры
Самый надежный способ форматирования даты с использованием исходного формата, который вы используете, - это выполнить следующие шаги:
new Date()
для созданияDate
объекта.getDate()
,.getMonth()
и.getFullYear()
получить соответственно день, месяц и годПример :
(Смотрите также эту скрипку ).
Только современные браузеры
Вы также можете использовать встроенный
.toLocaleDateString
метод для форматирования. Вам просто нужно указать правильную локаль и параметры, соответствующие правильному формату, который, к сожалению, поддерживается только современными браузерами (*) :(Смотрите также эту скрипку ).
(*) Согласно MDN , «современные браузеры» означают ночные сборки Chrome 24+, Firefox 29+, IE11, Edge12 +, Opera 15+ и Safari.
источник
Просто еще один вариант, о котором я писал:
Библиотека DP_DateExtensions
Не уверен, что это поможет, но я нашел это полезным в нескольких проектах - похоже, он будет делать то, что вам нужно.
Поддерживает форматирование даты / времени, математику даты (сложение / вычитание частей даты), сравнение даты, разбор даты и т. Д. Это свободно открытый источник.
Нет причин для этого, если вы уже используете фреймворк (они все способны), но если вам просто нужно быстро добавить манипуляции с датами в проект, дайте ему шанс.
источник
Если вы хотите показать только время с двумя цифрами, это может помочь вам:
источник
использовать эту функцию
см. ссылку ниже для получения дополнительной информации https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
источник
JsSimpleDateFormat - это библиотека, которая может форматировать объект даты и анализировать отформатированную строку обратно в объект Date. Он использует формат Java (класс SimpleDateFormat). Название месяцев и дней может быть локализовано.
Пример:
источник
Ответ - «никуда», поскольку форматирование даты является проприетарной функциональностью. Я не думаю, что функции toString предназначены для соответствия определенному формату. например, в спецификации ECMAScript 5.1 ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , 2/8/2013, стр. 173) функция toString документирована следующим образом :
Такие функции, как примеры ниже, могут быть использованы для выполнения форматирования довольно легко.
источник
Если вам не нужны все функции, которые предоставляет библиотека, такая как Moment.js , тогда вы можете использовать мой порт strftime . Он легок (1,35 КБ против 57,9 КБ минимизирован по сравнению с Moment.js 2.15.0) и обеспечивает большую часть функциональности
strftime()
.Пример использования:
Последний код доступен здесь: https://github.com/thdoan/strftime
источник
Правильный способ форматирования даты для возврата «2012-12-29» - использовать скрипт из JavaScript Date Format :
Этот код НЕ работает:
источник
Лично, поскольку я использую как PHP, так и jQuery / javascript в равных пропорциях, я использую функцию даты из php.js http://phpjs.org/functions/date/
Использовать библиотеку, которая использует те же строки формата, что и то, что я уже знаю, мне проще, и руководство, содержащее все возможности форматирования строк для функции даты, конечно, доступно на php.net.
Вы просто включаете файл date.js в свой HTML-код, используя предпочитаемый метод, а затем вызываете его так:
Вы можете использовать d1.getTime () вместо valueOf (), если хотите, они делают то же самое.
Деление на 1000 метки времени javascript связано с тем, что метка времени javascript указывается в миллисекундах, а метка времени PHP - в секундах.
источник
Многие фреймворки (которые вы, возможно, уже используете) имеют форматирование даты, о котором вы можете не знать. jQueryUI уже упоминался, но они есть и в других средах, таких как Kendo UI (глобализация) , Yahoo UI (Util) и AngularJS .
источник