簡體   English   中英

如何將UNIX時間戳轉換為Google Sheets日期值?

[英]How can I turn a UNIX timestamp into a Google Sheets date value?

我正在使用Google Apps腳本通過API檢索一些數據。 給我的日期是標准的ISO 8601字符串,我需要將其轉換為顯示時Google表格可以理解的日期數字(即Google表格/ Excel標准日期值)

當前,我正在使用一種變通方法,該方法是在單元格中傳遞字符串,然后通過DATEVALUE()函數將其轉換,但這並不是最佳選擇,因為我無法在腳本中本地使用該函數(來自本主題的研究)。

我想直接在Google Apps腳本中創建一個函數,該函數將Javascript的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之間的差),但是再一次,我又得到了兩個小時的時間間隔。

在下面鏈接的問題中,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

您可以通過使用new Date(string*1000)並將結果傳遞到Utilities.formatDate() 將Unix時間戳乘以1000表示您的參數以毫秒為單位,而不是秒。 這個Stackoverflow問題有很多關於使用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';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM