【发布时间】:2021-04-30 22:17:28
【问题描述】:
TL;DR:如何在 JavaScript 中将 字符串 "1.619820361123853E9" 转换为 Date?
长篇大论:
Google Apps 脚本中BigQuery.Jobs.query() 中的TIMESTAMP 值以字符串内 的大数字形式返回。例如:
SELECT CURRENT_TIMESTAMP() AS today_timestamp
在 Google Apps 脚本项目中运行它(使用来自 https://developers.google.com/apps-script/advanced/bigquery 的代码作为指导)看起来像这样:
const request = {
query: "SELECT CURRENT_TIMESTAMP() AS today_timestamp",
useLegacySql: false
};
let queryResults = BigQuery.Jobs.query(request, DW_PROJECT_ID);
let jobId = queryResults.jobReference.jobId;
let sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Logger.log(`Waiting for query: $jobId ($sleepTimeMs)`);
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(DW_PROJECT_ID, jobId);
}
let rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(DW_PROJECT_ID, jobId, {
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
let data = new Array(rows.length);
for (let i = 0; i < rows.length; i++) {
let cols = rows[i].f;
data[i] = new Array(cols.length);
for (let j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
Logger.log(`BQ to JavaScript TIMESTAMP: ${data[0][0]}`)
结果是data[0][0] 类似于"1.619820361123853E9"(一个字符串)。
如何将其转换为Date?
【问题讨论】:
-
它看起来像 Date() 值所以尝试 new Date(value); ref
-
尝试
new Date(parseFloat("1.619820361123853E9"))给我 1970 年 1 月 19 日星期一 09:57:00 GMT-0800(太平洋标准时间)......这是不对的! :) -
啊哈!
new Date(Number("1.619820361123853E9") * 1000)...感谢stackoverflow.com/questions/10943997/…
标签: google-apps-script google-bigquery