在谷歌脚本功能中,我需要从谷歌表中获取日期值我做过类似的事情
var csh = SpreadsheetApp.getActiveSheet();
var date = csh.getRange('A1').getValue();
var msg = "date = " + date;
我得到的是像
msg = "date = 42323"
如何格式化日期变量以显示为日期
感谢
答案 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)
;