【发布时间】:2019-05-31 08:41:06
【问题描述】:
我正在使用 Google Apps 脚本通过 API 检索一些数据。提供给我的日期是标准 ISO 8601 字符串,我需要将其转换为 Google 表格在显示时可以理解的日期编号(即作为 Google 表格/Excel 标准日期值)
目前我正在使用一种解决方法,它在我的单元格中传递一个字符串,然后通过DATEVALUE() 函数将其转换,但这不是最佳的,因为我不能在我的脚本中本地使用该函数(来自我对该主题的研究)。
我想直接在 Google Apps 脚本中创建一个函数,将 Javascript ol' Date() 对象转换为我的电子表格的可读值。
我曾尝试将自 1970 年以来的秒数转换为自 1900 年以来的天数,但我总是有两个小时的差距,我无法解释。我怀疑这与我在 UTC+2 中的事实有关,但无法真正解决它,并且增加两个小时听起来像是一个糟糕的解决方案。
到目前为止,我的基线是这样的:
function toDateNum(string) {
//Parsing to Unix Timestamp
date = new Date(string).getTime() / 1000
//Here I need convert to GSheets date value, add the number of days between 1900-01-01 and 1970-01-01
return date ;
}
我正在寻找一个算术解决方案(转换和添加日期)或集成在 Google 表格应用程序中的功能,以便我使用它。有什么建议么 ?
非常感谢!
编辑(附加说明)
我的一个问题是 google 表格不直接支持返回的 toISOString 格式。它只会被读取为字符串,而不是日期值。目前,我正在通过在单元格中发送toISOString 值并直接在表中使用 DateValue() 重新格式化来解决此问题。我正在尝试在脚本中本地执行此操作。
据我所知,Google 表格(和 Excel)支持的日期值是自 1900 年 1 月 1 日以来的天数。应该找到一个简单的算术解决方案(计算从几秒到几天的 unix 时间戳,然后添加 1900-01-01 到 1970-01-01 之间的差异)但是,我又得到了两个小时的间隔,这一切都搞砸了.
【问题讨论】:
-
G Sheets 接受的日期格式是什么?
-
如果是
epoch timestamp,可以看这里:coderwall.com/p/rbfl6g/… -
您是否有理由需要数字日期,而不是工作表能够解析的任何内容?如果没有,您可以简单地,例如,
function toSheet(unix) { var d = new Date(unix); return d.toISOString(); } -
问题是返回的
toISOString格式不被google sheet直接支持。我必须直接在表中使用DateValue()写入该值然后 将其转换为正确的日期格式。我正在尝试在脚本中本地执行此操作。 -
看起来 GSheets 使用
serial-number格式来存储日期:sheetshelp.com/date/using-dates-and-times-in-formulas
标签: javascript google-apps-script google-sheets