我正在使用以下方法来计算时间安排中的下一次时间。
public static function getNextUtcTimestampFromSchedule($schedule, $timezone)
{
$timestamps = array();
foreach ($schedule as $day => $times){
$dt = new \DateTime('next '.self::getDayString($day), new \DateTimeZone($timezone));
foreach ($times as $time){
list($hour, $min) = explode(':', $time);
$dt->setTime($hour, $min);
$timestamps[] = $dt->getTimestamp();
}
}
sort($timestamps);
return $timestamps[0];
}
$schedule
是一个数组,像这样:
$schedule = array(
0 => array('11:00', '17:00'),
1 => array('10:00', '18:00'),
2 => array('09:00', '18:00'),
3 => array('11:00', '17:00'),
4 => array('11:00', '16:00'),
5 => array('15:00', '16:00'),
6 => array('11:00', '12:00'),
);
getDayString
例如,简单地将 0 转换为“星期日”。
为了编写单元测试,我需要欺骗时间now()
,或者将其传递给方法并使用它。
问题是,我如何将它与 DateTime 一起使用?
即DateTime('next wednesday')
需要被告知“现在”是什么时间,以便以可预测的方式找出“下周三”,以便对其进行单元测试。