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. Дата  и  время
   250   251   252   253   254   255   256   257   258   259   260