繁体   English   中英

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

[英]How to get next occurrence of day of the week at a certain hour in 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') ,所以我们返回上一个脚本。

您可以使用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/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM