我在Apps脚本中使用日期/时间时遇到一些问题。任何人都可以告诉我不同的值来自何处以及我需要更改内容以在脚本中获得一致性>
如果我使用以下功能,它会以小时偏移(-1小时)记录时间。
function testDate(){
var date = new Date().toISOString().slice(0, 19).replace('T', ' ');
Logger.log(date);
}
您可以在下图中看到日志记录输出。它显示添加的日志条目为10:09,但从该函数添加的日志输出值为09:09。 09:09来自何处?我如何更改以获得伦敦GMT的正确时间?
我已经包含了项目的时区,因此您可以看到这一点。我还强调了上次修改时间,这似乎也是错误的。
请注意 - 此脚本未连接到电子表格,因此没有时区信息。
答案 0 :(得分:0)
当您写new Date().toISOString()
时,返回的值始终为UTC(see doc here),表示" GMT + 00"
但是伦敦(据我所知)在夏天使用夏令时(英国夏令时-BST简称,即使西欧XD的温度很低,我们仍然在夏天!)这是GMT + 01。
存在差异。
脚本属性中的最后一个修改字段是UTC,因为可以看到时间戳中的Z
(Z在军事时间来自Zulu,如果您愿意,则来自Z)。
答案 1 :(得分:0)
现在它是BST,这是UTC / GMT的一小时。要获取语言环境中的当前时间,请使用toLocaleString()。
Logger.log(new Date().toGMTString());
Logger.log(new Date().toLocaleString());
Logger.log(new Date().toUTCString());
Logger.log(new Date().toISOString());
给出了这些结果
[14-08-22 10:46:03:660 BST] Fri, 22 Aug 2014 09:46:03 GMT
[14-08-22 10:46:03:660 BST] 22 August 2014 10:46:03 BST
[14-08-22 10:46:03:660 BST] Fri, 22 Aug 2014 09:46:03 GMT
[14-08-22 10:46:03:661 BST] 2014-08-22T09:46:03.661Z
答案 2 :(得分:0)
提问者的评论表明他也喜欢输出格式化的ISO风格,所以我扩展了Bruce的new Date().toLocaleString()
方法并提出了以下内容:
var dateTimeArray = new Date().toLocaleString().split(" ");
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
/*
Return the 2 digit number associated with the "toLocaleString" spelt-out month:
1) Get the index value of the month from the array item
2) Add 1 to it (because it's zero-indexed)
3) Convert it to a string
4) Left pad all month numbers with a zero
5) Get the last 2 digits
*/
var monthNumber = ('0' + (months.indexOf(dateTimeArray[1])+1).toString()).slice(-2);
Logger.log('Before: '+new Date().toLocaleString())
Logger.log('After: '+dateTimeArray[2]+'-'+monthNumber+'-'+dateTimeArray[0]+' '+dateTimeArray[3]);
在Logs窗口中,这是一些示例输出:
[16-07-08 23:57:28:217 BST] Before: 08 July 2016 23:57:28 BST
[16-07-08 23:57:28:218 BST] After: 2016-07-08 23:57:28