如何从表格单元格中获取日期格式字符串?

时间:2015-11-19 16:23:07

标签: google-apps-script google-sheets

在谷歌脚本功能中,我需要从谷歌表中获取日期值我做过类似的事情

var csh = SpreadsheetApp.getActiveSheet();
var date = csh.getRange('A1').getValue();
var msg = "date = " + date;

我得到的是像

msg = "date = 42323"

如何格式化日期变量以显示为日期

感谢

2 个答案:

答案 0 :(得分:4)

正如jvdh所说,电子表格中的日期应自动转换为Google Apps脚本中的JavaScript日期。到目前为止,我们已经听到过您的情况。

related question from 2013上,AdamL做了很好的工作,解释了如何表示日期。他还暗示了一种从数字"序列号"转换的方法。 (或" Epoch")电子表格中的日期值,用于JavaScript中使用的Unix风格值。

这是我的该实用程序的版本。要使用,只需传入从电子表格中读取的值,如下所示:

var csh = SpreadsheetApp.getActiveSheet();
var date = convert2jsDate( csh.getRange('A1').getValue() );
var msg = "date = " + date;

该实用程序可以处理现有日期,#14;序列号"或JavaScript dateString支持的字符串格式。

/**
 * Convert any spreadsheet value to a date.
 * Assumes that numbers are using Epoch (days since 1 Jan 1900, e.g. Excel, Sheets).
 * 
 * @param {object}  value  (optional) Cell value; a date, a number or a date-string 
 *                         will be converted to a JavaScript date. If missing or
 *                         an unknown type, will be treated as "today".
 *
 * @return {date}          JavaScript Date object representation of input value.
 */
function convert2jsDate( value ) {
  var jsDate = new Date();  // default to now
  if (value) {
    // If we were given a date object, use it as-is
    if (typeof value === 'date') {
      jsDate = value;
    }
    else {
      if (typeof value === 'number') {
        // Assume this is spreadsheet "serial number" date
        var daysSince01Jan1900 = value;
        var daysSince01Jan1970 = daysSince01Jan1900 - 25569 // 25569 = days TO Unix Time Reference
        var msSince01Jan1970 = daysSince01Jan1970 * 24 * 60 * 60 * 1000; // Convert to numeric unix time
        var timezoneOffsetInMs = jsDate.getTimezoneOffset() * 60 * 1000;
        jsDate = new Date( msSince01Jan1970 + timezoneOffsetInMs );
      }
      else if (typeof value === 'string') {
        // Hope the string is formatted as a date string
        jsDate = new Date( value );
      }
    }
  }
  return jsDate;
}

答案 1 :(得分:1)

apps脚本会自动将电子表格日期转换为Javascript日期。当我运行你的代码时,msg等于“date = Wed Nov 11 2015 00:00:00 GMT + 0100(CET)”。

如果由于某些原因这对你不起作用,你可能想尝试使用新的Date();例如date = new Date(date);