Google 表格,实时倒计时,但有年、月、周和日

Google Sheets, Live Countdown but with years, months, weeks and days

提问人:asianpanda 提问时间:11/17/2023 更新时间:11/17/2023 访问量:33

问:

我很难找到一个公式,可以给我一个只显示年、月、周和日的倒计时。

就像我希望它这样做一样:

  1. A1 我输入一个截止日期,然后它显示“(数字)年份:(数字)月份:(数字)周:(数字)日”。如果该数字大于 1,则“年:月:周:天。
  2. 如果 A1 大于并等于 B1,则显示“逾期!

示例我键入 2023 年 12 月 24 日作为截止日期,然后“0 年:1 个月:1 周:1 天”,那么如果今天是 2024 年 12 月 24 日,则“逾期!

谢谢

谷歌表格

评论

0赞 MattKing 11/17/2023
根本不使用月份,这更简单、更准确。

答:

0赞 doubleunary 11/17/2023 #1

我不认为“周”的概念在这种情况下定义得很清楚——它可以是任何七天的时间段,从周日到周六的一个日历周,从周一到周日的一个日历周(因为它在欧洲、亚洲和非洲的大部分地区得到认可),或者其他什么。此外,大多数月份包含五个日历周的一小部分,但在某些年份,二月可能只包含四个日历周。目前尚不清楚如何计算月数、小数周数和整周数。

若要获取单元格中的日期与当前日期之间的持续时间(年、月和日),请使用以下模式:A1

=let( 
  durationText_, lambda(start, end, let(c_,lambda(d,if((d="")+isnumber(d),d,to_date(value(d)))),f_,lambda(t,t-int(t)),map(start,end,lambda(x,y,let(s,c_(x),e,c_(y),d_,lambda(u,datedif(s,e,u)),t_,lambda(u,text(e-s,u)),r,d_("md")-(f_(s)>f_(e)),d,if(r<0,day(eomonth(e,-1))-1,r),m,d_("ym")-(r<0),ifs(not(isnumber(s)*isnumber(e)),,s>=e,"Overdue",true,textjoin(", ",1,map({d_("y")-(m<0),mod(m,12),max(0,d),t_("H"),regexextract(t_("H:m"),":(\d+)"),t_("s")},{"year","month","day","hour","minute","second"},lambda(n,u,switch(n&"","0",,"1",n&" "&u,n&" "&u&"s")))))))))), 

  durationText_(today(), A1) 
)

要一次性获得列中所有日期的差异,请使用以下命令:B1:BA1:A

=let( 
  durationText_, lambda(start, end, let(c_,lambda(d,if((d="")+isnumber(d),d,to_date(value(d)))),f_,lambda(t,t-int(t)),map(start,end,lambda(x,y,let(s,c_(x),e,c_(y),d_,lambda(u,datedif(s,e,u)),t_,lambda(u,text(e-s,u)),r,d_("md")-(f_(s)>f_(e)),d,if(r<0,day(eomonth(e,-1))-1,r),m,d_("ym")-(r<0),ifs(not(isnumber(s)*isnumber(e)),,s>=e,"Overdue",true,textjoin(", ",1,map({d_("y")-(m<0),mod(m,12),max(0,d),t_("H"),regexextract(t_("H:m"),":(\d+)"),t_("s")},{"year","month","day","hour","minute","second"},lambda(n,u,switch(n&"","0",,"1",n&" "&u,n&" "&u&"s")))))))))), 

  durationText_(B1:B, A1:A) 
)

将公式放在空闲列的第 1 行中。