我正在尝试启动一个邮件链,以便让我的用户在我的平台上入职。我有一个Onboarding
具有以下属性的实体:
Onboarding::dayOfWeek (int)
Onboarding::hourOfDay (int)
所以我想要的是能够找到这对夫妇的下一次出现(dayOfWeek,hourOfDay)。例如下一个“星期五 12:00:00”或下一个“星期三 18:00:00”。然后在给定的周数内每周编写一封电子邮件。问题在于找到最近的预定时间(其余的非常简单)。
我在stackoverflow上使用其他一些答案提出了这段代码:
$date = new DateTime();
$date->setISODate($date->format('o'), $date->format('W'), $dayOfWeek);
$date->setTime($hourOfday, 0);
if ($date < new DateTime()) {
$date->modify('+1 week');
}
这完全符合预期,但感觉“hacky”,有没有正确的方法?理想情况下,这样的事情应该有效:
$days = [1 => 'Monday', 2 => 'Tuesday', 3 => 'Wednesday']; // and so on
$date = new \DateTime("next {$days[$dayOfWeek]} ${hourOfday}:00:00");
但是在撰写本文时是星期五,星期五的任何一个小时都是下周的星期五。我希望如果我在当前时间之后寻找一个 hourOfDay,它将被设置为今天!我错过了什么吗?因为这会让我手动检查日期是否从现在开始超过一周->modify('-1 week')
,所以我们回到之前的脚本。