php - 如何在 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/
推荐阅读
- javascript - gulp iconfonts的问题,我错过了什么?
- c# - IIS 中的 Blazor 服务器端下载问题
- mapbox - GPS 精度太高,地理定位点(蓝点)在 IOS 14 版本中的更新之一后在 IOS-Safari 中跳来跳去?
- python - 在 Python 中使用 groupby 计算加权平均值
- sql - 如何使用 DB2 sql 代码动态地将列转置为表的行,其中列可能会随着时间的推移而增加且无需更改代码?
- javascript - 我们的 await 关键字在 for await of 循环中的行为与普通异步函数中的行为有何不同?
- flutter - FireStore 数据库中的空值......屏幕上总是有这个 CircularProgressIndicator
- typescript - 无效的 Hook Call React(如何分配材质 ui 类)
- c++ - 使类中的函数指针依赖于初始化值
- cassandra - Cassandra Upsert 不适用于每一列