简体   繁体   English

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

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

I am using google API to create some events in google calendar.我正在使用谷歌 API 在谷歌日历中创建一些事件。 I need to get the date and time from the user input.我需要从用户输入中获取日期和时间。 This might be my logic issue but I can't figure it out.这可能是我的逻辑问题,但我无法弄清楚。 Here is my code:这是我的代码:

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);

       }
    });
 }

when I print the dateTime in my post section it is the right date that user entered but it does not recognize it in event variable.当我在我的帖子部分打印 dateTime 时,它是用户输入的正确日期,但它在事件变量中无法识别它。 and I get this error message:我收到此错误消息:

Error: Start and end times must either both be date or both be dateTime.错误:开始时间和结束时间必须都为日期或都为日期时间。

I also have another question, how can I add an hour to start time and use it for end time?我还有另一个问题,如何添加一个小时来开始时间并将其用作结束时间?

You can see the text fields that user can enter the date and time here您可以在此处看到用户可以输入日期和时间的文本字段

UPDATE:更新:

The RFC3339 formatted string expects the time in the format hh:mm:ss . RFC3339 格式的字符串需要格式为hh:mm:ss的时间。

Sample how to convert time object in the format hh-mm into an RFC3339 formatted string:示例如何将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"; 
  • Start and end times of Google Calendar events must be formatted according to RFC3339 Google 日历活动的开始和结束时间必须按照RFC3339进行格式化
  • You can retrieve the time with new Date()您可以使用new Date()检索时间
  • If you need to retrieve the client time zone and correct it manually to the desired timezone, you can use getTimeZoneOffset()如果您需要检索客户端时区并将其手动更正为所需的时区,您可以使用getTimeZoneOffset()

I did not quite understand how you want to process the user time zone, but here are two samples showing what is possible:我不太明白您想如何处理用户时区,但这里有两个示例显示了可能的情况:

  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