对于日期,Google表格会以近似纯数字格式(例如450345)给出一些数字值。如何在JavaScript中将该数字转换为日期值?尝试根据其中之一创建新的Date,但得到的值与Google表格的显示日期值不符。
答案 0 :(得分:1)
您可以获取单元格的日期format,然后使用“实用工具”获取日期format:
var cell = sheet.getRange("C4");
var formattedDate = Utilities.formatDate(cell.getValue(), "GMT", cell.getNumberFormat());
Logger.log(formattedDate);
请记住将GMT
更改为您的时区。
答案 1 :(得分:0)
大声疾呼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 :(得分:0)
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)”
答案 3 :(得分:0)
这些函数将javascript日期正确转换为Google Sheet日期的内部表示形式,反之亦然。
/**
* @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 object{Number}
* @returns {Number} GoogleDateValue - Days passed since dec 30 1899, time in fraction
*
*/
function DateToValue(date) {
return 25569 + (date.getTime()-date.getTimezoneOffset()*60000)/86400000 ;
}