如果单元格在午夜后更新,则返回昨天的某一天

Return the day of yesterday if a cell is updated after midnight

提问人:Catalin Ciobanu 提问时间:11/13/2023 更新时间:11/14/2023 访问量:48

问:

在谷歌表格文档中,我实现了一个脚本,其中工作表名称根据单元格 A10 中的内容进行更改。 这是脚本:

function onEdit() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var oldName = sheet.getName();
  var newName = sheet.getRange(1,10).getValue();
  if (newName.toString().length>0 && newName !== oldName) {
    sheet.setName(newName);
  }
}

在单元格 A10 中,我有公式 =concatenate(A1:A9)。 在 A1 中,我有公式 =day(today())。A2 = month(today())。A3 = year(today())。然后,下一个单元格和 A9 中的一些静态文本是将触发文件名更改的输入。

这样,工作表名称会根据 A9 单元格内容更改的时间自动更改当前日期、月份、年份。

我有 3 张床单,早上、下午和晚上更换。对于上午和下午的床单,没有问题,但是对于晚上,因为它可以在午夜之前或之后更改,因此无论何时更改,我都希望与其他 2 张床单使用同一天。

我已经在夜间床单中尝试了这个公式,但没有成功:

A1=if(day(today)='Afternoon'!A1; day(today()) ; day((today())-1))

有没有办法改进这个公式,或者我应该采取不同的方法?

谢谢!

Google-Sheets 自动完成 文件名

评论

1赞 Tedinoz 11/13/2023
I would like to use the same day as the other 2 sheets Day不是唯一的问题;一天可以改变月份年份。这些问题是否在您的方案中?您能否澄清给定工作表上是否有任何信息将其标识为上午、下午或晚上?

答:

1赞 Blind Spots 11/13/2023 #1

傍晚值

=LET(now, NOW(),
   DAY(now-(MOD(now, 24)<12))) 
  • 如果时间在中午 12:00(中午)之前,则减去 1 天。
  • 由于 1 天=1 和 1 小时=1/24,因此 MOD(x, 24)=12,其中 x=12:00 PM

单个日期字符串公式

正如@Tedinoz所指出的,在没有日期的情况下称呼日期,很容易出现日、月和年错误:

  • DAY("1/1/23")-1 ≠ DAY("1/1/23"-1)
  • MONTH("1/1/23") ≠ MONTH("1/1/23"-1)
  • YEAR("1/1/23") ≠ YEAR("1/1/23"-1)

这三个工作表都应使用一个公式来返回日期字符串。

晚间日期字符串

=LET(now, NOW(),
   TEXT(
     now-(MOD(now, 24)<12), 
     "ddmmyyyy"))
  • 替换 A1:A3 中的三个公式。
  • 根据需要调整日期字符串格式。

上午/下午日期字符串

=TEXT(NOW(), "ddmmyyyy") 
  • 替换 A1:A3 中的三个公式。
  • 使用单一日期格式删除时间。
  • 根据需要调整日期字符串格式。

评论

1赞 Catalin Ciobanu 11/14/2023
首先,感谢您的广泛回应。
0赞 Catalin Ciobanu 11/14/2023
首先,感谢您的回复。我更改了晚上和下午的公式,以摆脱这三个公式。这是一个更好的主意,更重要的是文件在当天一直在更改。但是对于晚上/晚上,我有一个问题。可以更改文件的时间范围在 21:00 到 05:00 之间。我判断是否正确,如果我将你的第一个公式 12 更改为 5,则只有在 05:00 之前更改文件时才会发生 1 天减法?另外,如果我用 MONTH/YEAR 更改 DAY 并将它们也用于月份和年份,相同的公式是否合法?
1赞 Catalin Ciobanu 11/14/2023
此外,您的 Evening Date String 公式在 TEXT 之后缺少 ( 。
0赞 Blind Spots 11/14/2023
@CatalinCiobanu 是的,该公式对于日/月/年是合法的。是的,您可以按照建议将 12 更改为 5。此外,如果时间范围包括 5:00,则更改为 .为了发现错别字,我通过将最初位于 TEXT 函数参数之后的右括号移动到它应该位于其参数之后的位置来纠正它。<12<=5numberformat
1赞 Catalin Ciobanu 11/15/2023
是的,我很快就弄清楚了 和 ;