【发布时间】:2021-09-12 15:24:04
【问题描述】:
我有以下 if 语句:
if date.weekday() != 0:
如何更改此 if 语句以每隔一周检查一次(每隔一周检查一天)?
提前感谢您的帮助!
【问题讨论】:
标签: python date if-statement calendar
我有以下 if 语句:
if date.weekday() != 0:
如何更改此 if 语句以每隔一周检查一次(每隔一周检查一天)?
提前感谢您的帮助!
【问题讨论】:
标签: python date if-statement calendar
您的帖子没有提及您使用的语言。知道这会很有用!
无论如何,像weekday 这样的函数可能会返回一个从 0 到 6 的数字,这不会为您提供足够的信息。
大多数语言都具有将日期转换为毫秒值的功能,通常是从 1970-01-01 00:00 UTC 开始的毫秒数。
如果你取这样一个值并除以 86400000(一天中的毫秒数),你就会得到一个天数。第 0 天(1970 年 1 月 1 日)恰好是星期四。
在 JavaScript 中,这一天数可以从 Date 对象中获取,如下所示:
let dayNum = Math.floor(someDate.getTime() / 86400000)
据此,dayNum % 7 为您提供周四至周三的 0-6 数字。您可以添加偏移量来更改 0 的含义。 (dayNum + 4) % 7 从周日到周六产生 0-6。
您希望每隔一周有一个 14 天的周期,因此您需要 dayNum % 14,然后您只需决定 0 到 13 之间的哪个值代表您的目标日期。
选取您想要的日期之一的任何样本日期,计算您在该日期获得的剩余值,然后测试该值是否能够匹配任何合格日期。
两个警告:
对于 1970 年之前的日期,% 运算符可能会产生负数。 Python 是少数不这样做的语言之一。
与 UTC 的时区偏移可能对您的任务很重要。如果这很重要,夏令时变化和/或 UTC 偏移的历史变化可能会使事情复杂化。
Python 更新:
假设即将到来的星期一(2021 年 7 月 5 日)是您想要的每隔一周的日子之一。这个:
date(2021, 7, 5).toordinal() % 14
...产生一个 8 的值。之前或之后的每个星期一也将是 8。toordinal() 方法直接得到一个天数,而不必担心毫秒、86400000 或不必担心时区偏移量。
【讨论】: