谷歌转换电子表格日期为JS Date对象?谷歌转换电子表格日期为JS Date对象?(Convert

2019-05-12 02:48发布

我一直转圈圈在这一个...我已经得到持有两个日期电子表格,我需要找到经过多年的两个(即一个人的年龄之间的人数在给定的日期。这是为Excel的DATEDIF的替代品)。

第一步是谷歌的序列号转换成JS Date对象,但似乎没有要日期构造函数做到这一点。 有任何想法吗?

谢谢。

Answer 1:

我知道,因为它代表你很高兴与您的解决方案,但我只是想补充我的谷歌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()它。

道歉长篇大论后。



Answer 2:

要在谷歌电子表格日期转换为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 ;
}


Answer 3:

这是我做的:

function numberToDate(number){
  var date = new Date(number * 24 * 60 * 60 * 1000);
  date.setFullYear(date.getFullYear() - 70);
  date.setDate(date.getDate() - 1);
  return (date);
}

这似乎有点脏,但是这是我发现现在唯一的解决办法



Answer 4:

经过一些运行实验,事实证明,这只是工作,这是一个有点意外的。 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;
}


Answer 5:

通过“序列号”我猜你在谈论一个UNIX时间从纪元秒或毫秒。 你可以简单地使用标准的JavaScript Date对象:

new Date(value);

谷歌是你的朋友在那里。 下面是一些引用您开始使用:

  • W3学校参考
  • W3学校教程
  • MDN参考

JavaScript允许你做简单的减法有两个日期,并返回你在毫秒的时间差。

var timeDiffInMS = date2 - date1;

这应该是所有你需要弄清楚,所以我会离开几年计算作为练习留给读者。



Answer 6:

你可以尝试这样的:

return new Date(1900, 0, --excelDate)


文章来源: Converting Google spreadsheet date into a JS Date object?