Строка JSON для обновления с помощью Javascript в редакторе сценариев Google Apps

#json #date #google-apps-script

#json #Дата #google-apps-script

Вопрос:

Я работаю через w3schools, в частности https://www.w3schools.com/js/js_json_parse.asp

Я запустил этот пример и получил неожиданный результат

   let dashText = '{ "name":"John", "birth":"1986-12-14", "city":"New York"}';
  let objD = JSON.parse(dashText);
  console.log("objD: ", objD);
  objD.birth = new Date(objD.birth);
  console.log("objD.birth: ", objD.birth);

3:09:04 PM  Info    objD:  { name: 'John', birth: '1986-12-14', city: 'New York' }
3:09:04 PM  Info    objD.birth:  Sat Dec 13 1986 18:00:00 GMT-0600 (Central Standard Time)
 

Обратите внимание на разницу в датах. Затем я из любопытства изменил тире на косые черты, и дата была правильно определена из строки.

   let slashText = '{ "name":"John", "birth":"1986/12/14", "city":"New York"}';
  let objS = JSON.parse(slashText);
  console.log("objS: ", objS);
  objS.birth = new Date(objS.birth);
  console.log("objS.birth: ", objS.birth);

3:09:04 PM  Info    objS:  { name: 'John', birth: '1986/12/14', city: 'New York' }
3:09:04 PM  Info    objS.birth:  Sun Dec 14 1986 00:00:00 GMT-0600 (Central Standard Time)
 

Кто-нибудь может объяснить результаты?

Ответ №1:

Javascript анализирует строки даты и времени по-разному в зависимости от того, как строка отформатирована. Тире анализируются с точностью до даты ISO, то есть международного времени. Вы можете увидеть это, когда он пытается обработать преобразование часовых поясов, где он устанавливает время на 18:00:00, чтобы учесть 6-часовой сдвиг от универсального времени. Косые черты анализируются как просто дата и не пытаются настроить время на основе часовых поясов.

Вот ссылка на w3schools, которая описывает это более подробно.