如何在 google 应用程序脚本中将时间戳 'new Date()' 格式化为新加坡时区?
How to format the Timestamp 'new Date()' into Singapore time zone in google apps script?
我在 google 应用程序脚本中有一个代码,它在满足某些条件时打印时间戳。代码如下:
function onEdit(e){
if (e.range.columnStart == 16 && e.range.rowStart >= 12) {
if (e.value == 'Update' || e.value == 'Transmit') {
e.range.offset(0, 1).setValue(new Date()).setNumberFormat("yyyy-MM-dd HH:mm:ss");
} else {
e.range.offset(0, 1).setValue('');
}
} else if (e.range.columnStart == 14 && e.range.rowStart >= 20) {
if (e.value == 'Transmit') {
e.range.offset(0, 1).setValue(new Date()).setNumberFormat("yyyy-MM-dd HH:mm:ss");
} else {
e.range.offset(0, 1).setValue('');
}
}
}
请注意,当我使用 google sheet 时,它是基于新加坡时区的,但我认为来自不同时区的其他人会与我不同。
我要实现的目标是为这些google sheet的所有用户(来自不同国家和不同时区)固定时区(基于新加坡时区)无论他们 google sheet 中的时区设置如何。我试图将它包含在 setNumberFormat
中,但似乎没有此函数的参数。不知道新加坡时区能不能实现,如果不能,那至少以纽约时区为准(因为纽约比较普遍?)。
解释:
您应该使用Utilities.formatDate(date, timeZone, format)方法并指定Singapore
的时区。
这是您可以用于您的目的的所有 timezone IDs 的列表,您的 ID 为 Asia/Singapore
。
因此,这将为您提供新加坡的正确格式和日期时间:
Utilities.formatDate(new Date(), 'Asia/Singapore', 'yyyy-MM-dd HH:mm:ss');
或鉴于新加坡的时区是GMT+8
你可以直接使用:
const dt = Utilities.formatDate(new Date(), 'GMT+8', 'yyyy-MM-dd HH:mm:ss');
解决方案:
function onEdit(e){
const dt = Utilities.formatDate(new Date(), 'Asia/Singapore', 'yyyy-MM-dd HH:mm:ss');
if (e.range.columnStart == 16 && e.range.rowStart >= 12) {
if (e.value == 'Update' || e.value == 'Transmit') {
e.range.offset(0, 1).setValue(dt);
} else {
e.range.offset(0, 1).setValue('');
}
} else if (e.range.columnStart == 14 && e.range.rowStart >= 20) {
if (e.value == 'Transmit') {
e.range.offset(0, 1).setValue(dt);
} else {
e.range.offset(0, 1).setValue('');
}
}
}
我在 google 应用程序脚本中有一个代码,它在满足某些条件时打印时间戳。代码如下:
function onEdit(e){
if (e.range.columnStart == 16 && e.range.rowStart >= 12) {
if (e.value == 'Update' || e.value == 'Transmit') {
e.range.offset(0, 1).setValue(new Date()).setNumberFormat("yyyy-MM-dd HH:mm:ss");
} else {
e.range.offset(0, 1).setValue('');
}
} else if (e.range.columnStart == 14 && e.range.rowStart >= 20) {
if (e.value == 'Transmit') {
e.range.offset(0, 1).setValue(new Date()).setNumberFormat("yyyy-MM-dd HH:mm:ss");
} else {
e.range.offset(0, 1).setValue('');
}
}
}
请注意,当我使用 google sheet 时,它是基于新加坡时区的,但我认为来自不同时区的其他人会与我不同。
我要实现的目标是为这些google sheet的所有用户(来自不同国家和不同时区)固定时区(基于新加坡时区)无论他们 google sheet 中的时区设置如何。我试图将它包含在 setNumberFormat
中,但似乎没有此函数的参数。不知道新加坡时区能不能实现,如果不能,那至少以纽约时区为准(因为纽约比较普遍?)。
解释:
您应该使用Utilities.formatDate(date, timeZone, format)方法并指定Singapore
的时区。
这是您可以用于您的目的的所有 timezone IDs 的列表,您的 ID 为 Asia/Singapore
。
因此,这将为您提供新加坡的正确格式和日期时间:
Utilities.formatDate(new Date(), 'Asia/Singapore', 'yyyy-MM-dd HH:mm:ss');
或鉴于新加坡的时区是GMT+8
你可以直接使用:
const dt = Utilities.formatDate(new Date(), 'GMT+8', 'yyyy-MM-dd HH:mm:ss');
解决方案:
function onEdit(e){
const dt = Utilities.formatDate(new Date(), 'Asia/Singapore', 'yyyy-MM-dd HH:mm:ss');
if (e.range.columnStart == 16 && e.range.rowStart >= 12) {
if (e.value == 'Update' || e.value == 'Transmit') {
e.range.offset(0, 1).setValue(dt);
} else {
e.range.offset(0, 1).setValue('');
}
} else if (e.range.columnStart == 14 && e.range.rowStart >= 20) {
if (e.value == 'Transmit') {
e.range.offset(0, 1).setValue(dt);
} else {
e.range.offset(0, 1).setValue('');
}
}
}