在Google Apps脚本编辑器中使用Javascript的JSON字符串



我正在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)

有人能解释一下结果吗?

Javascript根据字符串的格式对DateTime字符串进行不同的解析。破折号被解析为ISO日期,即国际时间。当它尝试处理时区转换时,您可以看到这一点,它将时间设置为18:00:00,以考虑到从通用时间转换6小时。斜线被解析为只是日期,并且不会试图根据时区调整时间。

这里有一个w3schools链接,详细介绍了这一点。