【问题标题】:Setting local date time for apps script triggers为应用程序脚本触发器设置本地日期时间
【发布时间】:2023-03-25 20:09:01
【问题描述】:

脚本时区设置为 Etc/GMT

我正在接受来自用户的日期(使用本地日期时间 yyyy-MM-ddTHH:mm)来调用触发函数。

var at = moment(mydate); // say user sets mydate (local IST) as 2017-06-21T14:31 

ScriptApp.newTrigger('onClock').timeBased().at(new Date(at)).inTimezone(CalendarApp.getDefaultCalendar().getTimeZone()).create();

这将在当地时间 IST 2017-06-21 20:01 调用触发器

如何编写代码以在当地时间 2017-06-21T14:31 调用触发器?

【问题讨论】:

    标签: javascript datetime google-apps-script datetime-format


    【解决方案1】:

    inTimezone(timezone) 方法只接受有效的“长格式”JODA 时区。

    JODA.org

    您已经获得了默认日历时区:

    CalendarApp.getDefaultCalendar().getTimeZone()
    

    它返回“长格式”JODA 类型的时区,这就是 inTimezone() 方法需要的参数。

    因此,您不需要从用户那里获取2017-06-21T14:31 信息,除非他们的默认日历时区与他们的本地时间相同。如果您的情况是,默认日历时区与其计算机上的本地时间之间存在差异; 并且您想要考虑这种差异,然后确实需要获取本地时区。

    如果您确实需要获取与默认日历时区不同的时区,那么用户需要选择一个时区,或者您可以尝试以其他方式获取它。

    在你的问题中,你说你得到的时间是:2017-06-21T14:31

    本地时间2017-06-21T14:31 中没有时区信息。如果它有偏移量,那么您可以使用偏移量返回“长格式”时区。

    您可以有一个下拉列表供用户选择,其值是有效的“长格式”JODA 时区。

    <select>
      <option value="Etc/GMT+12">GMT +12</option>
      <option value="Etc/GMT+11">GMT +11</option>
    </select>
    

    如果您确实需要从客户端代码获取用户本地时区,请参阅以下 Stack Overflow 答案:

    Stack Overflow answer - Getting the client's timezone in JavaScript

    var offset = new Date().getTimezoneOffset();
    console.log(offset);
    

    然后您需要将偏移量转换为值“长格式”时区。您可以通过将列表“硬编码”到代码中来做到这一点,并使用代码进行“查找”或构建“Etc/GMT+##”时区。偏移量与 GMT 数字相反。负 12 的标准偏移量是 +12 GMT

    偏移 --- 长格式

    -12:00 --- 等/GMT+12

    【讨论】:

    • 先获取偏移量var offset = new Date().getTimezoneOffset(); console.log(offset);你做到了吗?
    • 我不明白。你没有得到什么?
    猜你喜欢
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多