【问题标题】:new Date showing tomorrows date instead of today新日期显示明天的日期而不是今天
【发布时间】:2019-08-17 03:43:35
【问题描述】:

我已经设置了一个谷歌网络应用程序,该应用程序将数据输入谷歌电子表格并使用新的日期函数为其添加时间戳。我遇到的问题是在午夜到凌晨 1 点之间,日期被推迟到第二天。例如,如果我在 2019 年 12 月 3 日上午 00:45 输入数据,则谷歌电子表格中显示的日期为 2019 年 3 月 13 日上午 00:45。我使用 var timestamp 来显示日期和时间,使用 var date 来显示日期。奇怪的是, var date 得到正确的日期,而时间戳没有,即使它们都在完全相同的时间使用。我似乎只在午夜和凌晨 1 点之间遇到这个问题。非常感谢任何人提供的任何帮助。

var timestamp = Utilities.formatDate(new Date(), "GMT+10", "dd/MM/yyyy kk:mm:ss");

var date = Utilities.formatDate(new Date(), "GMT+10", "dd-MM-yy");
------------------------------------------------------------------------------


                var rowValues = [
                    [state, owner, type, fleet, rego, date, date, site, User, timestamp, comment]
                ]
                var lar = sheet.getLastRow() + 1
                var lar1 = archive.getLastRow() + 1
                var lar2 = STate.getLastRow() + 1
                var request = {
                    'valueInputOption': 'USER_ENTERED',
                    'data': [{
                            'range': 'National Master!A' + lar + ':K' + lar + '',
                            'majorDimension': 'ROWS',
                            'values': rowValues
                        },
                        {
                            'range': 'Archive!A' + lar1 + ':K' + lar1 + '',
                            'majorDimension': 'ROWS',
                            'values': rowValues
                        },
                        {
                            'range': '' + state + '!A' + lar2 + ':K' + lar2 + '',
                            'majorDimension': 'ROWS',
                            'values': rowValues
                        }
                    ]
                };
                var response = Sheets.Spreadsheets.Values.batchUpdate(request, "sheet id here");

【问题讨论】:

  • 将硬编码时区定义 (GMT+10) 替换为 Session.getScriptTimeZone() 以避免与夏令时相关的问题。

标签: datetime google-apps-script google-sheets timezone google-sheets-api


【解决方案1】:

尝试将表示小时的字母从 k 更改为 H in

var timestamp = Utilities.formatDate(new Date(), "GMT+10", "dd/MM/yyyy kk:mm:ss");

如果您查看ref docs here,您会看到

  • k 定义为“一天中的小时 (1-24)”
  • H 被定义为“一天中的小时 (0-23)”

我使用以下脚本对此进行了测试:

function dateCheck() {
  var d = new Date( 2019, 7, 17, 0, 45, 0 );
  var timestampK = Utilities.formatDate(d, Session.getScriptTimeZone(), "dd/MM/yyyy kk:mm:ss");
  var timestampH = Utilities.formatDate(d, Session.getScriptTimeZone(), "dd/MM/yyyy HH:mm:ss");
  Logger.log(timestampK);
  Logger.log(timestampH);
}

我得到以下输出:

17/08/2019 24:45:00

17/08/2019 00:45:00

k0 将日期推迟到明天,增加 24 小时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多