【问题标题】:How can I turn a UNIX timestamp into a Google Sheets date value?如何将 UNIX 时间戳转换为 Google 表格日期值?
【发布时间】: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


【解决方案1】:

您可以通过使用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';

【讨论】:

    【解决方案2】:

    在下面链接的问题中,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

    【讨论】:

      猜你喜欢
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2016-04-24
      相关资源
      最近更新 更多