首页 > 解决方案 > 如何在 PHP 中的某个时间获得一周中的下一个日期?

问题描述

我正在尝试启动一个邮件链,以便让我的用户在我的平台上入职。我有一个Onboarding具有以下属性的实体:

所以我想要的是能够找到这对夫妇的下一次出现(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'),所以我们回到之前的脚本。

标签: php

解决方案


您可以使用 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');

你可以在这里测试它http://phpfiddle.org/


推荐阅读