Javascript 谷歌脚本日期显示错误;“小时”;

Javascript 谷歌脚本日期显示错误;“小时”;,javascript,google-apps-script,dst,timezone-offset,Javascript,Google Apps Script,Dst,Timezone Offset,我感觉好像我已经用JS和GAS浏览了几乎所有关于日期的文档。特别是关于DST问题。因为在DST改变之前,我没有遇到过这样的问题。我想我错过了一些简单的事情。问题是,尽管弄乱了所有的设置,格式化实用程序输出的“我的日期”上的小时数仍然不正确。下面是调试器的屏幕截图和我正在运行的代码片段。 “date”是我关心的值。它是在第53行的脚本中创建的 var date = new Date(); //line 53 date = Utilities.formatDate(date, "Chicago/Am

我感觉好像我已经用JS和GAS浏览了几乎所有关于日期的文档。特别是关于DST问题。因为在DST改变之前,我没有遇到过这样的问题。我想我错过了一些简单的事情。问题是,尽管弄乱了所有的设置,格式化实用程序输出的“我的日期”上的小时数仍然不正确。下面是调试器的屏幕截图和我正在运行的代码片段。 “date”是我关心的值。它是在第53行的脚本中创建的

var date = new Date(); //line 53
date = Utilities.formatDate(date, "Chicago/America", "MM/dd/yyyy HH:mm:ss zzzz"); //line 61
我住在KC。(中央时间或UTC-06:00或其他时间)

我有一种感觉,这对我来说将是一个掌心时刻,但哦,好吧! 谢谢你的帮助


我通常使用的方法没有任何问题,只是:

  var FUS1=new Date(dateObject).toString().substr(25,6)+":00";// get the timeZone part of the string coming from the date you are working on (an event)
  dateString = Utilities.formatDate(dateObject, FUS1, "MM/dd/yyyy HH:mm:ss");// use it in formatDate and it will have the right value for every season...
请注意,您在示例代码中使用了两次
date
:一次作为字符串结果,一次作为同一行中的日期对象

编辑以下评论:

例如,假设日期戳在A2中,下面的代码应该返回正确的时间

  var date = SpreadsheetApp.getActiveSheet().getRange('A2').getValue();
  var FUS1=new Date(date).toString().substr(25,6)+":00";
  dateString = Utilities.formatDate(date, FUS1, "MM/dd/yyyy HH:mm:ss");

我通常使用的方法没有任何问题,只是:

  var FUS1=new Date(dateObject).toString().substr(25,6)+":00";// get the timeZone part of the string coming from the date you are working on (an event)
  dateString = Utilities.formatDate(dateObject, FUS1, "MM/dd/yyyy HH:mm:ss");// use it in formatDate and it will have the right value for every season...
请注意,您在示例代码中使用了两次
date
:一次作为字符串结果,一次作为同一行中的日期对象

编辑以下评论:

例如,假设日期戳在A2中,下面的代码应该返回正确的时间

  var date = SpreadsheetApp.getActiveSheet().getRange('A2').getValue();
  var FUS1=new Date(date).toString().substr(25,6)+":00";
  dateString = Utilities.formatDate(date, FUS1, "MM/dd/yyyy HH:mm:ss");

嗯。那么在第一行中,你是如何定义dateObject的?对不起,我没有看到你的评论。。。我称之为dateObject是为了指出与dateString的区别,它可能来自日历事件或电子表格单元格或其他任何东西。。。使用new Date()时,如果使用utilities.formatDate…,则创建一个日期对象。。。。你会得到一个日期字符串。你不能对他们每个人都这样做。当您必须在电子表格中写入日期时,您应该使用日期对象,并让电子表格以您想要的方式显示它。字符串不是很有用,因为您只能显示它。。。你能提供更多关于你用这个做什么的信息吗?嗯,好的,我想我现在明白了<代码>变量日期=新日期()//创建新的日期对象var datestring=Utilities.formatDate(日期,“芝加哥/美国”,“MM/dd/yyyy HH:MM:ss”)//返回日期字符串My output但是仍然是格式不正确的日期字符串,并且在使用上述两行时,date对象未考虑DST更改。我看到:date=2013年3月14日星期四12:19:27 GMT-6:00(CST)datestring=“03/14/2013 18:19:27”//What和18个小时在一起就更多信息而言,脚本本身用于获取表单上最新提交的时间戳。我得到了一些非常奇怪的日期,所以我在测试中发现了这个。更大的问题是,我正在使用formatDate方法尝试格式化常规字符串。我将不得不格式化字符串,就像我将任何其他。在某种程度上,它是。。。这是一种获取事件时区而不是用户时区的方法。它主要用于处理日历事件和夏令时(有时事件tz和用户tz因夏令时不同而不同)。那么在第一行中,您是如何定义dateObject的?对不起,我没有看到您的评论。。。我称之为dateObject是为了指出与dateString的区别,它可能来自日历事件或电子表格单元格或其他任何东西。。。使用new Date()时,如果使用utilities.formatDate…,则创建一个日期对象。。。。你会得到一个日期字符串。你不能对他们每个人都这样做。当您必须在电子表格中写入日期时,您应该使用日期对象,并让电子表格以您想要的方式显示它。字符串不是很有用,因为您只能显示它。。。你能提供更多关于你用这个做什么的信息吗?嗯,好的,我想我现在明白了<代码>变量日期=新日期()//创建新的日期对象var datestring=Utilities.formatDate(日期,“芝加哥/美国”,“MM/dd/yyyy HH:MM:ss”)//返回日期字符串My output但是仍然是格式不正确的日期字符串,并且在使用上述两行时,date对象未考虑DST更改。我看到:date=2013年3月14日星期四12:19:27 GMT-6:00(CST)datestring=“03/14/2013 18:19:27”//What和18个小时在一起就更多信息而言,脚本本身用于获取表单上最新提交的时间戳。我得到了一些非常奇怪的日期,所以我在测试中发现了这个。更大的问题是,我正在使用formatDate方法尝试格式化常规字符串。我将不得不格式化字符串,就像我将任何其他。在某种程度上,它是。。。这是一种获取事件时区而不是用户时区的方法。它主要在处理日历事件和夏时制时有用(有时事件tz和用户tz因夏时制而不同)。