javascript - 如何使用工作表 api v4 将当前日期时间插入谷歌工作表,尊重工作表的时区?
问题描述
几个小时以来,我一直在尝试将当前日期时间从 sheet api v4 插入到谷歌表格中。我不敢相信这是多么困难!
到目前为止,我发现:
Js date object
不起作用,因为谷歌表格使用不同的时代(显然根据 mac 与 win 而变化)。我一直找不到任何可以创建此 google 表格/excel 日期序列号的库。如果可以的话,那可能会奏效。
如果我将 Js 日期对象格式化为字符串并将其发送到工作表,由于服务器位置(运行工作表 api 的位置)与用户位置(使用工作表的位置),时区不正确。
我考虑将 Js Date 对象转换为用户的时区,但谷歌表并没有吐出 aGMT
或UTC
它使用CLDR的值。到目前为止,我还没有找到使用该信息来转换时区的方法。
电子表格的时区,采用 CLDR 格式,例如 America/New_York。如果时区无法识别,这可能是自定义时区,例如 GMT-07:00。
如果我updateRequest
使用=NOW()
日期时间作为值发送单元格,则日期时间是正确的。但是每次编辑电子表格时它都会更新......这不能用作行提交的时间戳。希望你能把它关掉!
所以总而言之,我想让谷歌表格创建日期,因为它知道用户的时区。当然有一种方法可以使用尊重用户时区的表格 API 输入日期,对吗?如果不是,我有什么选择?
解决方案
经过更多搜索后,我发现moment-timezone
可以使用CLDR
时区格式来提供正确的日期字符串。
所以我采用了这种方法,将 转换date time object
为工作表用户的时区,然后将数据发送到工作表。
我是这样做的,(我已经抽象出所有auth
, jwt
,spreadsheetId
部分):
const moment = require('moment-timezone');
const {google} = require('googleapis');
const sheets = google.sheets('v4');
const getSpreadsheetProperties = (jwt, sheets,spreadsheetId) => {
try{
var request = {
spreadsheetId: spreadsheetId,
ranges: [],
includeGridData: false,
auth: jwt,
};
return new Promise ((resolve, reject) => {
sheets.spreadsheets.get(request, (err, response) => {
if (err) {
console.error('getSpreadsheetProperties - error', err);
reject(false)
}
console.log('getSpreadsheetProperties - response', response)
resolve(response)
});
})
} catch(error) {
console.error('getSpreadsheetProperties - error', error)
return error
}
}
const getSheetProperties = (spreadsheetProperties) => {
return spreadsheetProperties.data.sheets
}
const getTimeZone = (spreadsheetProperties) => {
return spreadsheetProperties.data.properties.timeZone
}
const getDate = (timeZone) => {
const date = moment.tz(timeZone).format('DD-MM-YY, h:mm A')
return date
}
const ssProps = await getSpreadsheetProperties(jwt, sheets,spreadsheetId)
const timeZone = getTimeZone(ssProps)
const date = getDate(timeZone)
希望这将帮助其他人不要浪费他们的生命。
推荐阅读
- java - LinkedList 实现指针是基于 Java 的吗?
- python-3.x - 莎拉的报价函数
- java - 如何让 JTextArea 使用其关键事件?
- networking - 网络日志中的 WebRTC 数据包
- javascript - 如何从javascript中的3个对象数组中排序并获取最大值并将其分配给另一个数组?
- amazon-web-services - 我无法访问具有公共 IP 的网站
- python - 要求已安装,但是当我尝试运行该程序时它说它没有
- python - groupby 对象到数据框
- html - 导航栏徽标在 CSS 中不起作用,但在 HTML 中起作用
- c - 如何在没有警告的情况下返回正确的数据类型