如何在PHP中的某个小时获取星期几的下一次出现?

时间:2018-12-14 10:56:01

标签: php

我正在尝试建立一个邮件链,以将我的用户加入我的平台。我有一个具有以下属性的实体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')之后超过一周,所以我们返回上一个脚本。

1 个答案:

答案 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');

您可以在http://phpfiddle.org/

进行测试