【问题标题】:getEventsForDay() formatting issues with datepicker return value日期选择器返回值的 getEventsForDay() 格式问题
【发布时间】:2016-10-12 22:16:38
【问题描述】:

我正在尝试使用日历 API 根据 datepicker 输出提取一些事件。我的 AppScript 面临的问题是正确格式化我从 datepicker 获得的值,该值将用作 getEventsForDay() 函数的输入。

function testing(){
 var z = CalendarApp.getCalendarsByName("X")[0];
 var date = new Date('2016-10-12');
 var dateformatted =Utilities.formatDate(date), "GMT", "yyyy-MM-dd hh:mm:ss a");
 var a = z.getEventsForDay(dateformatted, {search: 'OOO'});

在这种情况下 a 的输出是一个空对象 - 这是预期的,因为这种格式根本不起作用。 (我已经阅读了 1000 篇应该可行的帖子)。

对于上下文,我有一个关于今天日期的工作示例,它可以正常工作,因为输入是一个新的 Date()。给你:

 var datetoday = new Date();  
 var b = z.getEventsForDay(datetoday, {search: 'OOO'});

关于我在这里缺少什么的任何想法?

提前致谢。

【问题讨论】:

    标签: javascript google-apps-script google-calendar-api


    【解决方案1】:

    由于new Date() 返回的是 UTC 格式的 Date 对象,而不是本地时区,如果前一天没有任何事件,您可能会查询错误的日期,因此查询的是空对象。

    您可以将日期转换为当前时区,例如

    date.setTime(date.getTime() + date.getTimezoneOffset()*60*1000)
    

    这应该返回当地时区的日期,您将获得正确日期的事件。

    希望对你有帮助

    【讨论】:

    • 像魅力一样解决问题!谢谢!
    • 其实这个解决方案有一个问题:它只适用于今天的日期。如果您为未来设置日期,它将继续返回今天的日期。至少从我到目前为止所做的测试来看。
    • 我刚刚意识到,如果我将条目添加为 new Date('July 1, 1999') 它将起作用。但整个问题是如何从我的日期选择器转换为这种格式,输出结果为“YYYY-MM-DD”
    【解决方案2】:

    进行了一些更改,现在这适用于应用脚本:

     var t = "2016-10-01";
     var q = t.replace(/-/g,"/");
     var a = new Date(q);
     a.setTime(a.getTime() + a.getTimezoneOffset()*60*1000)
     var w = z.getEventsForDay(a, {search: 'OOO'}); 
     Logger.log(a);
     Logger.log(w);
    

    【讨论】:

      猜你喜欢
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多