![](/img/trans.png)
[英]Node.js - Google Calendar API showing error "Missing end time" when inserting an event
[英]Why does Google Calendar API insert my event 4 hours earlier than the date/time that I've given it using Node.js?
我終於得到了谷歌日歷 api,可以使用 Node.js 將事件插入我的日歷,但該事件比我給它的開始時間早 4 小時插入。
這是我為插入它所做的工作。 在此示例中:日期變量為“2022-05-18”,時間變量為“17:18”,然后當我控制台記錄 apptDate 變量時,輸出為 2022-05-18T17:18:00.000Z
但該活動已於 2022 年 5 月 18 日 13:18 插入我的日歷中。
export const insertGoogleCalendarEvent = async (req, res)=> {
try{
const {firstName, lastName, date, time, duration} = req.body
const apptDate = new Date(`${date}T${time}:00.000Z`).toISOString()
const SCOPES = ['https://www.googleapis.com/auth/calendar', 'https://www.googleapis.com/auth/calendar.events']
const GOOGLE_PRIVATE_KEY = process.env.GOOGLE_PRIVATE_KEY
const GOOGLE_CLIENT_EMAIL = process.env.GOOGLE_CLIENT_EMAIL
const GOOGLE_PROJECT_NUMBER = process.env.GOOGLE_PROJECT_NUMBER
const GOOGLE_CALENDAR_ID = process.env.GOOGLE_CALENDAR_ID
let endDateTime = ''
if (duration === '60') {
let newDate = new Date(apptDate)
newDate.setHours(newDate.getHours() + 1)
endDateTime = newDate.toISOString()
} else if (duration === '75') {
let newDate = new Date(apptDate)
newDate.setMinutes(newDate.getMinutes() + 75)
endDateTime = newDate.toISOString()
} else if (duration === '90') {
let newDate = new Date(apptDate)
newDate.setMinutes(newDate.getMinutes() + 90)
endDateTime = newDate.toISOString()
}
const event = {
'summary': `${firstName} ${lastName}`,
'start': {
'dateTime': `${apptDate}`,
'timeZone': 'Canada/Eastern'
},
'end': {
'dateTime': `${endDateTime}`,
'timeZone': 'Canada/Eastern'
}
}
const jwtClient = new google.auth.JWT(
GOOGLE_CLIENT_EMAIL,
null,
GOOGLE_PRIVATE_KEY,
SCOPES
)
const calendar = google.calendar({
version: 'v3',
project: GOOGLE_PROJECT_NUMBER,
auth: jwtClient
})
calendar.events.insert({
calendarId: GOOGLE_CALENDAR_ID,
resource: event,
}, {
function (err, event) {
if (err) {
console.log('this is an error', err)
return
}
console.log('Event created:', event.htmlLink);
}
})
} catch {
console.log('error')
}
}
一個原因可能是appDate
變量末尾的.00Z
部分,因為它指的是UTC
時區(Z 表示 UTC 或祖魯時間)。 嘗試在末尾使用格式-04:00
(加拿大/東部)設置所需的時區。
const apptDate = new Date(`${date}T${time}:00-04:00`).toISOString()
再次查看問題后,我認為 API 將您在apptDate
變量( .000Z
,UTC)中設置的日期和時間調整為您在timeZone
選項中指定的時區。 在這種情況下,它是Canada/Eastern
,UTC-4 小時,因此它從您設置的時間中刪除了 4 小時。
dateTime
文檔說
時間,作為組合的日期時間值(根據 RFC3339 格式化)。 除非在 timeZone 中明確指定時區,否則需要時區偏移量。
因此,更簡潔的方法是按原樣使用apptDate
(UTC),而不使用timeZone
選項。
const apptDate = new Date(`${date}T${time}:00.000Z`).toISOString()
...
'start': {
'dateTime': `${apptDate}`
},
'end': {
'dateTime': `${endDateTime}`
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.