【问题标题】:Apps Script timezone is off one hourApps 脚本时区关闭一小时
【发布时间】:2016-07-13 19:39:38
【问题描述】:

我在 Apps 脚本中使用日期/时间时遇到了一些问题。谁能告诉我不同​​的值来自哪里以及我需要在哪里进行更改以使整个脚本保持一致>

如果我使用下面的函数,它会记录一个小时偏移量(-1 小时)的时间。

function testDate(){
 var date = new Date().toISOString().slice(0, 19).replace('T', ' ');
  Logger.log(date);
}

您可以在下图中看到日志记录输出。它显示正在添加的日志条目为 10:09,但从函数添加的日志输出值为 09:09。 09:09 是从哪里来的?如何更改它以获得伦敦 GMT 的正确时间?

我已包含项目的时区,以便您查看。我还突出显示了上次修改时间,这似乎也不正确。

请注意 - 此脚本未连接到电子表格,因此没有来自该电子表格的时区信息。

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    现在是 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
    

    【讨论】:

    • 我想这会产生一个新问题,但是我将如何获取从 toLocaleString() 返回的值并以 mysql datetime 会满意的方式对其进行格式化?
    • 您可以使用Utilities.FormatDate控制日期字符串表示
    【解决方案2】:

    当你写new Date().toISOString()时,返回值总是UTC(see doc here),也就是“GMT+00”

    但伦敦(据我所知)在夏季使用夏令时(英国夏令时 - 简称 BST-,即使西欧气温较低 XD,我们仍处于夏季!)这是 GMT+ 01.

    区别就在那里。

    脚本属性中最后修改的字段是 UTC,这要归功于时间戳中的 Z(Z 在军事时间来自祖鲁语,或者如果您愿意,则为零)。

    【讨论】:

      【解决方案3】:

      提问者的评论表明他也喜欢输出格式的 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]);
      

      在“日志”窗口中,以下是一些示例输出:

      [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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 2018-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-26
        相关资源
        最近更新 更多