1 minute read

В очередной раз борясь с несоответствием форматов дат на клиенте и сервере, у элементов календаря и хранении в БД решил для себя составить маленькую памятку и придти к общему знаменателю.

| Наименование    	| Формат                              	| Пример                                                      	|
|-------------------|---------------------------------------|---------------------------------------------------------------|
| 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

Формат даты и времени, поддерживающий указание часовых поясов и смещение.