Page 255 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 255
const before = { d : new Date ( ) } ;
before . d instanceof date 1 1 true
const j s on = JSON . s tringify ( b efore ) ;
const after = JSON . p arse ( j son) ;
after . d instdanceof date 11 false
typeof after . d / / "string"
Таким образом, плохая новость в том, что JSON не может полностью и симмет
рично обрабатывать даты в JavaScript. Хорошая новость в том, что строковая сери
ализация, которую использует JavaScript, всегда единообразна, поэтому вы можете
"восстановить" дату.
r
after . d = new Date ( a fte . d ) ;
a f ter . d instanceof date /! true
Независимо от того, какой именно часовой пояс первоначально использовался
при создании даты, после ее перекодировки в JSON она будет в формате UTC, а ког
да строка кода JSON будет передана конструктору Date, дата будет отображена в ло
кальном часовом поясе.
Другой безопасный способ передачи даты между клиентом и сервером подраз
умевает просто использование числового значения даты.
const before = { d : new Date ( ) . v alueOf ( ) } ;
t y peof before . d 1 1 "numЬer"
const j s on = JSON . s tringify ( b efore ) ;
const after = JSON . p arse ( j son) ;
typeof a f ter . d / / "п итЬеr "
r
const d = new Date (afte . d ) ;
Хотя JavaScript прекрасно работает с перекодировкой JSON дат
в строки, библиотеки JSON для других языков и платформ нет. Сери
ализатор JSON для .NET, в частности, заключает кодированные JSON
объекты даты в оболочку их собственного формата. Так, если вы вза-
имодействуете с JSON из другой системы, потрудитесь разобраться,
как она сериализирует даты. Если вы контролируете исходный код,
то, возможно, безопаснее будет передавать числовые даты как смеще
ния от Эпохи Unix. Но даже в этом случае следует быть вниматель
ным: библиотеки дат зачастую предоставляют числовое значение в се
кундах, а не в миллисекундах.
е
Отображ н и е дат
Форматирование дат при выводе зачастую является одной из самых раздражаю
щих задач для новичков. Встроенный объект JavaScript Date включает лишь несколь
ко встроенных форматов даты, и если они не удовлетворяют вашим потребностям,
258 Глава 1 5. Дата и время

