EML*_*EML 13 javascript datetime google-sheets google-apps-script
我已经绕过这一个...我有一个包含两个日期的电子表格,我需要找到两者之间经过的年数(即某个人在给定日期的年龄;这是替换Excel的DATEDIF).
第一步是将Google的序列号转换为JS Date对象,但似乎没有Date构造函数执行此操作.有任何想法吗?
谢谢.
Ada*_*amL 10
我知道您对目前的解决方案感到满意,但我只想添加我对Google Apps脚本如何处理"日期"的观察,或者通过自定义函数传递,或者从具有getValue()的单元格中检索.
我的经验法则是,如果Sheets(电子表格应用程序)提供格式化为日期的值(通过自动强制或用户设置格式),则Google Apps脚本会自动将此值保存为日期对象.
例如:
function returnDate(value) {
return new Date(value);
}
Run Code Online (Sandbox Code Playgroud)
如果您输入1/1/13A1,并且在您调用的另一个单元格中=returnDate(A1),它将返回相同的日期(就像您return value;在代码中所拥有的那样).但是,请注意将A1格式设置为"正常"时会发生什么(将其转换为数值).在这里,"Sheets序列号"(从18/12年12月30日起的天数)被Google Apps脚本转换为日期对象,但在GAS中,它被"视为"从1970年1月1日午夜起的毫秒数.因此,如果您传递的数值是您认为代表日期的,那么您可能会得到意想不到的结果.
还比较:
=returnDate(DATE(2013;1;1))
=returnDate(VALUE("1/1/13"))
=returnDate(DATEVALUE("1/1/13"))
=returnDate("1/1/13")
=returnDate("1/1/2013")
后两个"工作",因为new Date()从有效的字符串成功创建了日期对象,但请注意,Sheets会自动强制转换到当前世纪,而GAS则强制将两位数的年份强制转换为1900年.
所以IMO如果你希望它的行为与在Excel中的行为完全一样(即"将数值"视为日期的序列号),则需要首先测试传递的参数是否为日期对象(或"有效的"文本字符串",如果没有,从数学上将它从"从18/12/1899的天数"转换为"从1970年1月1日的毫秒",然后new Date()它.
为啰嗦的帖子道歉.
小智 9
要将Google电子表格日期转换为javascript日期:
var JSdate = Date.parse(Cell.getValue())
Run Code Online (Sandbox Code Playgroud)
要将javascript日期转换为Google电子表格日期,请执行以下操作:
function GoogleDate( JSdate ) {
var D = new Date(JSdate) ;
var Null = new Date(Date.UTC(1899,11,30,0,0,0,0)) ; // the starting value for Google
return ((D.getTime() - Null.getTime())/60000 - D.getTimezoneOffset()) / 1440 ;
}
Run Code Online (Sandbox Code Playgroud)
这就是我所做的:
function numberToDate(number){
var date = new Date(number * 24 * 60 * 60 * 1000);
date.setFullYear(date.getFullYear() - 70);
date.setDate(date.getDate() - 1);
return (date);
}
Run Code Online (Sandbox Code Playgroud)
这可能看起来有点脏,但这是我目前找到的唯一解决方案
Dan*_*iel -2
我猜你所说的“序列号”是指从纪元开始的以秒或毫秒为单位的unix时间。您可以简单地使用标准的 Javascript Date 对象:
new Date(value);
Run Code Online (Sandbox Code Playgroud)
谷歌是你的朋友。以下是一些可以帮助您入门的参考资料:
Javascript 允许您对两个日期进行简单的减法,返回以毫秒为单位的时间差。
var timeDiffInMS = date2 - date1;
Run Code Online (Sandbox Code Playgroud)
这应该就是您需要弄清楚的全部内容,因此我将把年份计算留给读者作为练习。
| 归档时间: |
|
| 查看次数: |
8738 次 |
| 最近记录: |