繁体   English   中英

如何从谷歌日历 API 中的用户获取日期和时间?

[英]How to get date and time from user in google calendar API?

我正在使用谷歌 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 时,它是用户输入的正确日期,但它在事件变量中无法识别它。 我收到此错误消息:

错误:开始时间和结束时间必须都为日期或都为日期时间。

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

您可以在此处看到用户可以输入日期和时间的文本字段

更新:

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

示例如何将hh-mm格式的时间 object 转换为 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'
   },

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM