仅仅是我或Google最近有变化吗?我有一个函数可以为编辑添加时间戳,这些编辑工作得很好,就在前几天它已经破坏了。
它打破了它曾经在我的时区标记时间的意义 - 正如我使用的函数格式所指定的那样,现在它似乎是GMT而不是GMT-8的时间戳。我的剧本没有任何改变,发生了什么?
function happyFunTime() {
var s = SpreadsheetApp.getActiveSheet();
var r = s.getActiveCell();
var columnNum = r.getColumn();
var timeLastCalledColumnOffset = getTimeLastCalledColumnOffset();
var rowNum = r.getRow();
if (rowNum <=1) return;
timeLastCalledColumnOffset++;
// set dateCell = the current row at column J
var dateCell = s.getRange(rowNum, timeLastCalledColumnOffset);
var tZone= "GMT-8";
// Format the current date into datetime format
var dateTime = Utilities.formatDate(new Date(), tZone, "MMM-dd-yyyy h:mm a");
// Set the cell value. Add apostrophe to force text treatment & keep the spreadsheet from reformatting
dateCell.setValue("'" + dateTime);
}
getTimeLastCalledColumnOffset()
是一个自定义函数,用于返回包含我感兴趣的值的列的数量(J,在这种情况下为9)。
答案 0 :(得分:3)
是的,昨天有一个问题,因为这个字符串“GMT-2”或“GMT-0200”工作正常,现在有问题。
您可以更改此行:
var tZone= "GMT-8"
到这个
var tZone= "GMT-08:00"
或者您可以使用以下代码行获取时区:
var FUS1 = new Date().toString().substr(25,8); // I use FUS1 instead of tZone
// GMT-0800 -> GMT-08:00 , ...
var FUS1 = FUS1.substr(0,6) + ':' + FUS1.substr(6)
// Format the current date into datetime format
var dateTime = Utilities.formatDate(new Date(), FUS1 , "MMM-dd-yyyy h:mm a");
或者你可以从这里写下你的时区:
http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
“America / Dawson” - &gt; -08:00(我不知道你住在哪里:-()
和这段代码:
var dateTime = Utilities.formatDate(new Date(), "America/Dawson" , "MMM-dd-yyyy h:mm a");
注意:如果要格式化从DateBox(标签,文本框,...)捕获的日期,那么最后一行可以是:
var dateTime = Utilities.formatDate(new Date(e.paramameter.datebox), "America/Dawson" , "MMM-dd-yyyy h:mm
塞吉
答案 1 :(得分:1)
另一个让Utilities.formatDate()
中包含正确字符串的简单解决方案是使用Session.getTimeZone()
,在我的情况下返回例如'Europe/Paris'
并且是有效参数。
答案 2 :(得分:0)
我们可以使用以下行直接更改电子表格的时区
SpreadsheetApp.getActive().setSpreadsheetTimeZone(Session.getScriptTimeZone())