javascript – 将Google电子表格日期转换为JS Date对象?
作者:互联网
我已经绕过这一个…我有一个包含两个日期的电子表格,我需要找到两者之间经过的年数(即某个人在给定日期的年龄;这是替换Excel的DATEDIF).
第一步是将Google的序列号转换为JS Date对象,但似乎没有Date构造函数执行此操作.有任何想法吗?
谢谢.
解决方法:
我知道您对目前的解决方案感到满意,但我只想添加我对Google Apps脚本如何处理“日期”的观察,或者通过自定义函数传递,或者从具有getValue()的单元格中检索.
我的经验法则是,如果Sheets(电子表格应用程序)提供格式化为日期的值(通过自动强制或用户设置格式),则Google Apps脚本会自动将此值保存为日期对象.
例如:
function returnDate(value) {
return new Date(value);
}
如果你在A1中输入1/1/13,而在另一个单元格中调用= returnDate(A1),它将返回相同的日期(如果你只是返回值那么;在代码中).但是,请注意将A1格式设置为“正常”时会发生什么(将其转换为数值).在这里,“Sheets序列号”(从18/12年12月30日起的天数)被Google Apps脚本转换为日期对象,但在GAS中,它被“视为”从1970年1月1日午夜起的毫秒数.因此,如果您传递的数值是您认为代表日期的,那么您可能会得到意想不到的结果.
还比较:
= returnDate(DATE(2013; 1; 1))
= returnDate(VALUE( “13年1月1日”))
= returnDate(DATEVALUE( “13年1月1日”))
= returnDate( “13年1月1日”)
= returnDate( “2013年1月1日”)
后两个“工作”,因为新的Date()从一个有效的字符串成功创建了一个日期对象,但请注意Sheets会自动强制转换到当前世纪,而GAS则强制将两位数的年份强制转换为1900年.
所以IMO如果你希望它的行为与在Excel中的行为完全一样(即“将数值”视为日期的序列号),则需要首先测试传递的参数是否为日期对象(或“有效的“文本字符串”,如果没有,从数学上将它从“从18/12/1899的天数”转换为“从1970年1月1日的毫秒”,然后是新的日期().
为啰嗦的帖子道歉.
标签:javascript,datetime,google-sheets,google-apps-script 来源: https://codeday.me/bug/20190925/1815963.html