寻找更好的方法将小时和分钟附加到修改后的 Datetime 对象上



我正在尝试根据一个数据库项目投影出许多定期约会,该项目声明应用程序时间,它发生在一周中的哪一天,以及appt发生多少次直到它停止(如果它曾经停止(

我可以通过首先将分钟和小时存储到单独的变量中,然后修改对象并将小时和分钟附加到每个修改的对象上作为存储在数组中来使其工作。

$t = new DateTime($ra->start_date);
$c = new DateTime($ra->end_date);
$hour = $t->format('H');
$mins = $t->format('i');
$chour = $c->format('H');
$cmins = $c->format('i');
for($k=0; $k<$frequency[$i]; $k++){
$mod = '+1 weekday';
$s = clone $t->modify($mod)->setTime($hour, $mins);
$e = clone $c->modify($mod)->setTime($chour, $cmins);
array_push($starts, $s);
array_push($ends, $e);
}

如果我不这样做,它会按所需的数量修改日期,但它会将时间戳擦除为

00:00:00。

该行为在相对时间格式文档的第一个Note块中进行了解释:

请注意,"明天 11:

00"和"明天 11:00"是 不同。考虑到今天的日期"2008年7月23日"的第一个 制作"2008-07-24 11:00",其中第二个产生 "2008-07-24 00:00".

原因是"昨天"、"午夜"、"今天"、"中午" 和"明天" 直接影响当前时间。

因此,考虑到这一点,一种稍微紧凑的方法是将时间作为要添加的相对时间的一部分进行传递。用于演示:

$date = new DateTimeImmutable('2019-08-30 14:31:26');
$newDate = $date->modify('+1 weekday ' . $date->format('H:i:s'));

演示

由于您需要可变性才能重复添加天数,因此请像您一样使用常规DateTime对象而不是DateTimeImmutable

最新更新