【发布时间】:2018-02-06 17:46:43
【问题描述】:
总结
我一直在使用时区的 Google 表格工作,但我发现了一个我无法弄清楚的令人困惑的问题。基本上,如果我在静态日期或动态生成的日期上使用自定义脚本公式,我会得到不同的结果,但它应该是相同的!
我有什么
这是一个快速预览,显示了我在说什么。 C2 是动态创建的日期,而 C5 是静态日期。我创建了一个自定义函数,它将采用 TimeDateString(例如 C2 和 C5)并将其转换为另一个时区。
您可以清楚地看到D2 和D5 是不同的答案;但是,它们应该是相同的。 这就是这个问题的原因。这是一个错误吗?还是我错过了什么?
电子表格链接
https://docs.google.com/spreadsheets/d/1HEFud8oqM-Yx0BR5SjyEG8yjGK-O0t8c6YcEfYtnLSA/edit?usp=sharing
代码
自定义脚本函数
function DateTime(dateTimeString, timeZone, format) {
if (format == null) { format = "MMM dd 'at' hh:mma z" }
if (timeZone == null) { timeZone = "GMT" }
var date_time = new Date(dateTimeString);
if(!isNaN(date_time.valueOf())) {
return Utilities.formatDate(date_time, timeZone, format);
} else {
throw Utilities.formatString('Invalid Date String: "%s"', dateTimeString);
}
}
C2公式
=CONCATENATE(Month($A2), "/", if(Day($A2) < 10, CONCAT("0", Day($A2))), "/", Year($A2), " ", Hour($B2), ":", if(Minute($B2) < 10, CONCAT("0", MINUTE($B2)), Minute($B2)))
D2公式
=DateTime(C2)
D5公式
=DateTime(C5)
【问题讨论】:
-
@pnuts 能否请您将该评论 [关于我的脚本位于错误的时区] 作为一个充分的答案,因为它解决了我的问题(我没有做出其他建议的更改)。我想奖励你。我没有尝试过您的
A2 + B2建议,但以后可能会奏效(我之前尝试过,但没有奏效) -
我已更改电子表格以使用
GMT时区,但没有意识到脚本具有相同类型的设置。您的链接表明这是问题的常见来源 -
@pnuts 你对
A2 + B2的建议效果很好,看起来好多了 -
@pnuts 我按照建议创建了一个新答案
标签: datetime google-sheets datetime-format utc custom-function