#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, которая описывает это более подробно.