簡體   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