我一直转圈圈在这一个...我已经得到持有两个日期电子表格,我需要找到经过多年的两个(即一个人的年龄之间的人数在给定的日期。这是为Excel的DATEDIF的替代品)。
第一步是谷歌的序列号转换成JS Date对象,但似乎没有要日期构造函数做到这一点。 有任何想法吗?
谢谢。
我一直转圈圈在这一个...我已经得到持有两个日期电子表格,我需要找到经过多年的两个(即一个人的年龄之间的人数在给定的日期。这是为Excel的DATEDIF的替代品)。
第一步是谷歌的序列号转换成JS Date对象,但似乎没有要日期构造函数做到这一点。 有任何想法吗?
谢谢。
我知道,因为它代表你很高兴与您的解决方案,但我只是想补充我的谷歌Apps脚本如何与“日期”交易的意见,无论是在自定义函数用的getValue通过,或从细胞检索()。
我的经验法则是,如果表(电子表格应用程序)将提供格式化为日期的值(通过自动胁迫,或用户设置的格式),那么谷歌Apps脚本会自动保存该值作为日期对象。
例如:
function returnDate(value) {
return new Date(value);
}
如果你进入1/1/13
在A1,并在另一个单元调用=returnDate(A1)
它会返回相同的日期(因为它会如果你只是有return value;
在代码中)。 然而,当观看格式化A1为“正常”(其转换为一个数值)会发生什么。 这里,“表序列号”(从30/12/1899天数)转换成由谷歌Apps脚本在约会的对象,但在GAS它“认为”为毫秒数从午夜1/1/1970 。 所以,如果你路过,你认为是代表日期的数值,你可能会得到意想不到的效果。
也比较:
=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()
成功地创建了一个从有效的字符串Date对象,但要注意,表自动强制转换为当前世纪,而燃气胁迫一个两位数的年份为1900年。
所以IMO如果你想它的行为正是因为它会在Excel文件(即“关于”一个数值作为一个日期序列号),你将需要第一次测试,如果传递的参数是一个Date对象(或“有效”的文本字符串),如果不是,数学从转换‘天30/12/1899’到‘毫秒从1/1/1970’,然后new Date()
它。
道歉长篇大论后。
要在谷歌电子表格日期转换为JavaScript日期:
var JSdate = Date.parse(Cell.getValue())
到JavaScript日期转换为谷歌电子表格日期:
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 ;
}
这是我做的:
function numberToDate(number){
var date = new Date(number * 24 * 60 * 60 * 1000);
date.setFullYear(date.getFullYear() - 70);
date.setDate(date.getDate() - 1);
return (date);
}
这似乎有点脏,但是这是我发现现在唯一的解决办法
经过一些运行实验,事实证明,这只是工作,这是一个有点意外的。 new Date(cell)
似乎序号在内部转换成字符串,这足以创建日期对象。 完整的答案:
function datedif(first, second, format) {
var e1 = new Date(first);
var e2 = new Date(second);
var age = e2.getFullYear() - e1.getFullYear();
if(
(e2.getMonth() < e1.getMonth()) ||
((e2.getMonth() == e1.getMonth()) && (e2.getDate() < e1.getDate())))
age--;
return age;
}
通过“序列号”我猜你在谈论一个UNIX时间从纪元秒或毫秒。 你可以简单地使用标准的JavaScript Date对象:
new Date(value);
谷歌是你的朋友在那里。 下面是一些引用您开始使用:
JavaScript允许你做简单的减法有两个日期,并返回你在毫秒的时间差。
var timeDiffInMS = date2 - date1;
这应该是所有你需要弄清楚,所以我会离开几年计算作为练习留给读者。
你可以尝试这样的:
return new Date(1900, 0, --excelDate)