【发布时间】:2020-10-25 20:54:36
【问题描述】:
公开表:https://docs.google.com/spreadsheets/d/1pXrUkA-fY1hw3bie4Bv1mamkmzics9dfX59B12spuPI/edit?usp=sharing
问题:我有两个日期看起来相同,但应用程序脚本说它们不是。 我有一张日期表。我循环浏览日期以查看一个日期是否等于前一个日期。 脚本(从第二行开始)应该返回 true、false、true。但相反,它返回 false、false、false。 有没有想过为什么会这样?
9/8/2020
9/8/2020 // should be true, returns false
9/15/2020 // should be false, ok
9/15/2020 // should be true, returns false
代码 sn-ps
//test code
for (var r=10;r<=14;r++){
for (var c=2;c<=4;c++){
Logger.log(sh.getRange(r,c).getValue());
Logger.log(sh.getRange(r-1,c).getValue());
Logger.log(sh.getRange(r,c).getValue() == sh.getRange(r-1,c).getValue());
}}
Logger response (shows dates are objects but equivalent dates aren't...):
[20-10-25 17:05:30:975 EDT] Tue Sep 08 00:00:00 GMT-04:00 2020
[20-10-25 17:05:30:976 EDT] object
[20-10-25 17:05:30:977 EDT] Tue Sep 15 00:00:00 GMT-04:00 2020
[20-10-25 17:05:30:979 EDT] object
[20-10-25 17:05:30:980 EDT] false
[20-10-25 17:05:30:981 EDT] false
[20-10-25 17:05:30:982 EDT] Tue Sep 15 00:00:00 GMT-04:00 2020
[20-10-25 17:05:30:984 EDT] object
[20-10-25 17:05:30:986 EDT] Tue Sep 15 00:00:00 GMT-04:00 2020
[20-10-25 17:05:30:987 EDT] object
[20-10-25 17:05:30:989 EDT] false
[20-10-25 17:05:30:990 EDT] false
【问题讨论】:
-
您可以在数字上比较来自 getTime() 或 valueOf() 方法的 Date() 值。 ref
-
而不是使用 getValue() 使用
const vA= getValues()然后你可以做类似const dt=new Date();if(Date(vA[r][c]).valueOf()==dt.value()) -
如果你只对日期而不是时间感兴趣,那么你会想要做类似
const date=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate())这样的事情,就像获得午夜的价值 -
@JasonTorpy 为什么不简单地将 B 列的格式更改为具有两种匹配格式,然后使用我在回答中提到的 getDisplayValues ?
-
我们已经有几个类似的问题已经得到解答,例如Compare two dates Google apps script
标签: javascript date datetime google-apps-script google-sheets