我正在使用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-01-01以来的天数。应该找到一个简单的算术解决方案(计算从几秒钟到几天的unix时间戳,然后加上1900-01-01与1970-01-01之间的差),但是再一次,我又得到了两个小时的时间间隔
答案 0 :(得分:0)
在下面链接的问题中,user79865的响应说明了如何在工作表中管理日期及其格式。 Sheets API文档还指定了您可以使用的所有不同格式,以及在处理日期和时间时如何创建自己的格式。 Utilities.formatDate()将帮助您将日期格式更改为所需的任何格式。
表格文档的网址:https://developers.google.com/sheets/api/guides/formats
答案 1 :(得分:0)
您可以使用new Date(string*1000)
,然后将结果传递到Utilities.formatDate()
,以实现此目的。将Unix时间戳乘以1000表示您的参数以毫秒为单位,而不是秒。 This Stackoverflow Question对于使用js格式化日期有很多不错的信息。
function toDateNum(string) {
//convert unix timestamp to milliseconds rather than seconds
var d = new Date(string*1000);
//get timezone of spreadsheet
var tz = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone();
//format date to readable format
var date = Utilities.formatDate(d, tz, 'dd-MM-yyyy hh:mm:ss a');
return date;
}
此脚本将使用电子表格的时区设置,但是您可以将其更改为使用脚本的时区,也可以自己输入一个,如果要改用以下示例,请参见以下示例:
//use spreadsheet timezone setting
var tz = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone();
//use script timezone setting
var tz = Session.getScriptTimeZone();
//enter your own time zone
var tz = 'GMT+0';