如何从Google表格日期数字值转换为JavaScript日期?

时间:2018-11-01 04:07:44

标签: javascript google-apps-script google-sheets

对于日期,Google表格会以近似纯数字格式(例如450345)给出一些数字值。如何在JavaScript中将该数字转换为日期值?尝试根据其中之一创建新的Date,但得到的值与Google表格的显示日期值不符。

4 个答案:

答案 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 ;
}