如何在 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('');
    }
  }
}