如何将UNIX时间戳转换为Google Sheets日期值?

时间:2019-05-31 08:41:07

标签: javascript google-apps-script google-sheets

我正在使用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之间的差),但是再一次,我又得到了两个小时的时间间隔

2 个答案:

答案 0 :(得分:0)

在下面链接的问题中,user79865的响应说明了如何在工作表中管理日期及其格式。 Sheets API文档还指定了您可以使用的所有不同格式,以及在处理日期和时间时如何创建自己的格式。 Utilities.formatDate()将帮助您将日期格式更改为所需的任何格式。

问题网址:https://webapps.stackexchange.com/questions/88621/basic-date-manipulation-in-google-script?newreg=7c66fdcf156f4ff5a30eb5fa4153b243

表格文档的网址: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';