使用DatePeriod、DateInterval类参数化php代码
我不太理解DatePeriod和DateInterval类。这个问题与另一个问题相关联——我想将由提供的解决方案参数化 谢谢你的帮助 这是Artefactor的代码:使用DatePeriod、DateInterval类参数化php代码,php,datetime,time,timezone,Php,Datetime,Time,Timezone,我不太理解DatePeriod和DateInterval类。这个问题与另一个问题相关联——我想将由提供的解决方案参数化 谢谢你的帮助 这是Artefactor的代码: $tz1 = new DateTimezone("Asia/Calcutta"); $indiaAvail = array( new DatePeriod(new DateTime("2010-08-01 10:00:00", $tz1), new DateInterval("PT2H15M"), 1) )
$tz1 = new DateTimezone("Asia/Calcutta");
$indiaAvail = array(
new DatePeriod(new DateTime("2010-08-01 10:00:00", $tz1),
new DateInterval("PT2H15M"), 1)
);
这就是我想到的:
function shift_timezones_onweek($from_timezone, $from_timebegin, $from_timeend, $to_timezone)
{
$tz1 = new DateTimezone($from_timezone);
$datetime1 = new DateTime("2010-08-01 $from_timebegin", $tz1);
$datetime2 = new DateTime("2010-08-01 $from_timeend", $tz1);
$interval = $datetime1->diff($datetime2);
$indiaAvail = array(
new DatePeriod($datetime1, $interval, 1)
);
...
正如Artefactor所指出的,“从两次构建DatePeriod并不是为了让它在两次之后立即分解为这两个日期”,但是我不明白如何轻松地修改它,使其与他的代码的其余部分一起工作(我想这需要$indiaAvail的存在…)类存储开始日期、结束日期和间隔(或者,相当于开始日期、间隔和重复次数)。它是
可遍历的
,当在foreach
循环中迭代时,它将产生从开始到结束的所有日期(DateTime
对象),并以给定的间隔将它们分隔开
因此,迭代DatePeriod
类与迭代由DatePeriod
生成的所有日期组成的数组是一样的
所以我们可以写:
//...
$tz1 = new DateTimezone($from_timezone);
$datetime1 = new DateTime("2010-08-01 $from_timebegin", $tz1);
$datetime2 = new DateTime("2010-08-01 $from_timeend", $tz1);
$indiaAvail = array(
array($datetime1, $datetime2),
);
$tz2 = new DateTimezone($to_timezone);
//convert periods:
$times = array_map(
function (array $p) use ($tz2) {
$res = array();
foreach ($p as $d) {
$res[] = $d->setTimezone($tz2);
}
return $res;
},
$indiaAvail
);
//...
DatePeriod
类存储开始日期、结束日期和间隔(或者等效地存储开始日期、间隔和重复次数)。它是可遍历的
,当在foreach
循环中迭代时,它将产生从开始到结束的所有日期(DateTime
对象),并以给定的间隔将它们分隔开
因此,迭代DatePeriod
类与迭代由DatePeriod
生成的所有日期组成的数组是一样的
所以我们可以写:
//...
$tz1 = new DateTimezone($from_timezone);
$datetime1 = new DateTime("2010-08-01 $from_timebegin", $tz1);
$datetime2 = new DateTime("2010-08-01 $from_timeend", $tz1);
$indiaAvail = array(
array($datetime1, $datetime2),
);
$tz2 = new DateTimezone($to_timezone);
//convert periods:
$times = array_map(
function (array $p) use ($tz2) {
$res = array();
foreach ($p as $d) {
$res[] = $d->setTimezone($tz2);
}
return $res;
},
$indiaAvail
);
//...
非常好用-抱歉打扰你了!非常好用-抱歉打扰你了!