Google Sheets Script中new Date()带时区返回错误时间的问题
问题分析与解决
你的问题出在12小时制格式的使用上,hh是12小时制的小时占位符,它会把18点(下午6点)转换成06,但没有额外的上下午标识(AM/PM),再加上单元格格式也用了hh:mm,就会直接显示成早上6点的样子。
两种解决办法
办法一:改用24小时制显示
把格式化字符串里的hh换成HH(24小时制占位符),同时调整单元格的数字格式:
var nowvalue = Utilities.formatDate(new Date(), "GMT-8", "MM/dd/yyyy HH:mm"); spreadsheet.getActiveRange().setValue(nowvalue); spreadsheet.getActiveRangeList().setNumberFormat('ddd" "m"/"d" "HH:mm');
这样下午6点就会直接显示为18:00,不会有歧义。
办法二:保留12小时制并显示上下午标识
如果习惯用12小时制,就在格式化字符串和单元格格式里加上aa(显示AM/PM):
var nowvalue = Utilities.formatDate(new Date(), "GMT-8", "MM/dd/yyyy hh:mm aa"); spreadsheet.getActiveRange().setValue(nowvalue); spreadsheet.getActiveRangeList().setNumberFormat('ddd" "m"/"d" "hh:mm aa');
这样下午6点会显示为06:00 PM,明确区分上下午。
为什么其他时区看起来正常?
- 设为GMT+4时,PST下午6点(GMT-8)对应的GMT+4时间是次日早上6点,这时候
hh:mm显示的06:00刚好是实际时间,所以看起来正确; - 设为GMT时,PST下午6点对应GMT次日2点,
hh:mm显示02:00也是该时区的正确12小时制时间,所以没出问题。
内容的提问来源于stack exchange,提问作者linkify
相关产品推荐
相关产品推荐

