Формат дат в Javascript
В очередной раз борясь с несоответствием форматов дат на клиенте и сервере, у элементов календаря и хранении в БД решил для себя составить маленькую памятку и придти к общему знаменателю.
| Наименование | Формат | Пример |
|-------------------|---------------------------------------|---------------------------------------------------------------|
| ISO 8601 | YYYY-MM-DD YYYY-MM-DDTHH:mm:ss.sssZ | 2016-05-26 |
| Long | MMM DD YYYY DD MMM YYYY | Mar 25 2015 25 Mar 2015 |
| Short | MM/DD/YYYY | 03/25/2015 |
| Full text string | DDD MMM DD YYYY HH:mm:ss zzz | Wed Mar 25 2015 09:56:24 GMT+0100 (W. Europe Standard Time) |
Формат ISO 8601
Основная идея формата- порядок, в котором значения даты и времени расположены от более значимого к менее значимому. Каждое число (год, месяц, день, время) записывается с фиксированным числом знаков и, при необходимости, дополняется до него ведущими нулями.
Стандарт разрешает использовать дефис для разделения элементов даты, а двоеточия для разделения времени.
Менее значимую часть можно отбрасывать, при этом соблюдая порядок значимости и фиксированное число знаков для выражения той или иной части (2016-05 является корректной датой, означающей май 2016).
Если время указано в формате UTC, то в самом конце добавляется Z без пробела.
Для отделения даты от времени (а так же, аналогично Z, для указания на формат UTC) используется символ T.
Формат Long date
Основная идея формата- порядок, в котором значения года, месяца и даты размещены не имеют значения (доступны 27 May 2016 и 2016 May 27).
Значение года может содержать как 2, так и 4 цифры.
Имена месяцев и дней (например May или Friday) должны содержать не менее двух знаков (в случае не уникальности двузначных имён, они преобразуются в последнее из соответствующих Ju -> July). Если имя дня недели противоречит полученному алгоритмом, то оно игнорируется в пользу правильного.
Формат Short date
Строгий формат даты, допускающий вид месяц/день/год, а в качестве разделителя могут использоваться символы “/” и “-” (при этом в Chrome разделители игнорируются и даты вида ‘05-27.2016’, ‘05?27*2016’ вполне себе являются корректными).
Формат full text string
Формат даты и времени, поддерживающий указание часовых поясов и смещение.