编程语言
首页 > 编程语言> > javascript – 将Google电子表格日期转换为JS Date对象?

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