如何将 Google Sheet 日期数值转换为 JavaScript 日期?
Posted
技术标签:
【中文标题】如何将 Google Sheet 日期数值转换为 JavaScript 日期?【英文标题】:How to convert from Google Sheet date number value to JavaScript date? 【发布时间】:2018-11-01 04:07:43 【问题描述】:对于日期,Google 表格以大致纯数字格式给出一些数值,例如 450345。如何在 javascript 中将此数字转换为日期值?尝试根据其中一个创建新日期,并得到一个与 Google 表格显示日期值不对应的值。
【问题讨论】:
如果可以将值转换为Date
对象,您应该能够获取Date
对象。您能否通过部分受影响单元格的屏幕截图向我们展示您如何获取值?
这个帖子对您的情况有用吗? ***.com/a/15137090/7108653
如果单元格是日期和时间,则 Google 表格使用自 1899 年 12 月 30 日 0:00:00 以来的数值天数,其中小数部分是一天的小数部分。当然,如果您将格式设置为日期和时间,您会看到日历日期和时间。 Javascript 从 1970 年 1 月 1 日 0:00:00 开始使用毫秒。如果您获取日期单元格的值(),则转换为毫秒会自动完成,并且它与 javascript 日期兼容。但如果你得到数值,你必须乘以 24*60*60*1000 转换为毫秒。
【参考方案1】:
感谢 TheWizEd 引导我找到看似正确的答案。这是一个简单的转换脚本:
function logSheetDateString(GS_date_num, timezone, format)
var GS_earliest_date = new Date(1899, 11, 30),
//GS_earliest_date gives negative time since it is before 1/1/1970
GS_date_in_ms = GS_date_num*24*60*60*1000;
Logger.log(Utilities.formatDate(new Date(GS_date_in_ms + GS_earliest_date.getTime()),
timezone, format));
自 1970 年 1 月 1 日以来到毫秒的转换可以简化为:
JS_date_in_ms = GS_date_num * 86400000 - 2209132800000;
【讨论】:
【参考方案2】:您可以使用实用程序获取单元格的日期format,然后format:
var cell = sheet.getRange("C4");
var formattedDate = Utilities.formatDate(cell.getValue(), "GMT", cell.getNumberFormat());
Logger.log(formattedDate);
记得将GMT
更改为您的时区。
【讨论】:
【参考方案3】:这些函数将 javascript 日期正确地转换为 Google 表格日期的内部表示,反之亦然。
/**
* @param Number GoogleDateValue - Days passed since dec 30 1899, time in fraction
* @returns Date object - javascript date object
*
*/
function ValueToDate(GoogleDateValue)
return new Date(new Date(1899,11,30+Math.floor(GoogleDateValue),0,0,0,0).getTime()+(GoogleDateValue%1)*86400000) ;
/**
* @param Date object - javascript date objectNumber
* @returns Number GoogleDateValue - Days passed since dec 30 1899, time in fraction
*
*/
function DateToValue(date)
return 25569 + (date.getTime()-date.getTimezoneOffset()*60000)/86400000 ;
【讨论】:
【参考方案4】:function job_counter()
var yesterday_jobs=0;
var ss=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
var e = new Date(new Date().getFullYear(),new Date().getMonth() , new Date().getDate())
var range_unformated=ss.getRange(2,3,25)
var range = Utilities.formatDate(range_unformated.getValues(), "GMT", range_unformated.getNumberFormats())
for (var i=1; i<25; i++)
if ( range[i] - e <= 0 && range[i] != "" )
yesterday_jobs = yesterday_jobs + 1
ss.getRange(16,2).setValue(yesterday_jobs)
Logger.log(d)
// check yesterday_jobs
我收到消息“找不到方法 formatDate(object,string,object)”
【讨论】:
以上是关于如何将 Google Sheet 日期数值转换为 JavaScript 日期?的主要内容,如果未能解决你的问题,请参考以下文章
如何将Google Visualization API的日期列转换为JSON格式