【问题标题】:How to get date and time from user in google calendar API?如何在谷歌日历 API 中从用户那里获取日期和时间?
【发布时间】:2020-05-11 15:31:33
【问题描述】:

我正在使用谷歌 API 在谷歌日历中创建一些事件。我需要从用户输入中获取日期和时间。这可能是我的逻辑问题,但我无法弄清楚。这是我的代码:

var dateTime;

app.post('/', function (req, res) {
    res.render('index');
    var date = req.body.date;  //I get date from user
    var time = req.body.time;  // I get time from user
    dateTime = date +'T'+ time+":00"; //trying to create the RFC3339 fromat
    console.log("date time: ",dateTime);
    createEvents(jwtClient);
  }); 

 var event = {    
  'start': {
      'dateTime': dateTime,
      'timeZone': 'America/Los_Angeles',
  },
  'end': {
     'dateTime': '2020-06-12T12:00:00',
     'timeZone': 'America/Los_Angeles',
  },

 'conferenceData': {
    'createRequest': {
      'conferenceSolutionKey': {
        'type': 'hangoutsMeet'
        },
     'requestId': 'iyfuted65e3ers'

    }
  },

'attendees': [
  {'email': 'test@test.com'},
  {'email': 'jhfk@test.com'},
],
'reminders': {
  'useDefault': false,
  'overrides': [
    {'method': 'email', 'minutes': 24 * 60},
    {'method': 'popup', 'minutes': 10},
   ],
  },
};


 //Create Appointment
  function createEvents(auth) {
    const calendar = google.calendar({ version: 'v3', auth });
    calendar.events.insert({
        calendarId: 'primary',
        conferenceDataVersion: 1,
        resource: event,
    }, (err, res) => {
       if (err) return console.log('The API returned an error: ' + err);
         else {
        result = res.data.hangoutLink;
        console.log(result," start date: ", event.start.dateTime);

       }
    });
 }

当我在我的帖子部分打印 dateTime 时,它​​是用户输入的正确日期,但它在事件变量中无法识别它。我收到此错误消息:

错误:开始时间和结束时间必须要么都是日期,要么都是日期时间。

我还有一个问题,如何添加一个小时作为开始时间并将其用作结束时间?

You can see the text fields that user can enter the date and time here

【问题讨论】:

    标签: javascript datetime google-calendar-api


    【解决方案1】:

    更新:

    RFC3339 格式的字符串需要hh:mm:ss 格式的时间。

    示例如何将hh-mm格式的时间对象转换为RFC3339格式的字符串:

      var date = req.body.date;  //I get date from user
      var time = req.body.time;  // I get time from user
      time = time.split("-")[0] + ":" + time.split("-")[0];
      var dateTime = date +'T'+ time+ ":00"; 
    
    • Google 日历活动的开始和结束时间必须按照RFC3339 格式化
    • 您可以使用new Date()检索时间
    • 如果需要检索客户端时区并手动更正到所需时区,可以使用getTimeZoneOffset()

    我不太明白您想如何处理用户时区,但这里有两个示例显示了可能的情况:

      var now = new Date();
      Logger.log("Current time:" + now);
      var dateTime = new Date(now.getTime()).toISOString().split(".")[0];
      Logger.log(dateTime);
      var event = {    
       'start': {
          'dateTime': dateTime,
          'timeZone': 'America/Los_Angeles',
      },
       'end': {
         'dateTime': '2020-06-12T12:00:00',
         'timeZone': 'America/Los_Angeles',
      },
    ...
    
    
      var now = new Date();
      Logger.log("Current time:" + now);
      var offset = new Date().getTimezoneOffset();
      offset = (offset / (-60));
      if (offset < 10) {
        offset =  '0'+offset;
      }
      offset = '+' + offset + ':00';
      var dateTime = new Date(now.getTime()-new Date().getTimezoneOffset()*60*1000).toISOString().split(".")[0] + offset;
      Logger.log(dateTime);
      var event = {    
        'start': {
          'dateTime': dateTime
        },
       'end': {
         'dateTime': '2020-06-12T12:00:00-07:00'
       },
    

    【讨论】:

    • 感谢您的回复,但正如我所见,这会给我当前的日期和时间,但在我的代码中,我在不同的字段中从用户那里获取日期和时间。如何使用用户在该字段中输入的数据?
    • 您可以在这里找到数据输入的图片:i.stack.imgur.com/nxpJp.png
    猜你喜欢
    • 2016-03-22
    • 2020-11-04
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    相关资源
    最近更新 更多