电子表格中最近的时区变化?

时间:2012-12-15 19:47:18

标签: google-apps-script google-sheets

仅仅是我或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)。

3 个答案:

答案 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())