我正在尝试建立一个邮件链,以将我的用户加入我的平台。我有一个具有以下属性的实体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')
之后超过一周,所以我们返回上一个脚本。
答案 0 :(得分:0)
您可以使用DateTime格式选项执行以下操作:https://secure.php.net/manual/en/book.datetime.php/en/class.datetime.php
$eventDate = DateTime::createFromFormat('m/d/y h:i', '02/26/11 08:00', new DateTimeZone('Europe/Madrid'));
$eventDate->modify('-1 week');
echo date_format($eventDate, 'm/d/Y (l) - H:m:s');
进行测试