如何在这两个日期之间回复星期一/星期三/星期五的所有日期?
这就是我一直在使用的:
function get_days ( $s, $e )
{
$r = array ();
$s = strtotime ( $s . ' GMT' );
$e = strtotime ( $e . ' GMT' );
$day = gmdate ( 'l', $s );
do
{
$r[] = $day . ', ' . gmdate ( 'Y-m-d', $s );
$s += 86400 * 7;
} while ( $s <= $e );
return $r;
}
print_r ( get_days ( $start, $end ) );
答案 0 :(得分:1)
试试这个:
function getDates($start_date, $end_date, $days){
// parse the $start_date and $end_date string values
$stime=new DateTime($start_date);
$etime=new DateTime($end_date);
// make a copy so we can increment by day
$ctime = clone $stime;
$results = array();
while( $ctime <= $etime ){
$dow=$ctime->format("w");
// assumes $days is array containing integers for Sun (0) - Sat (6)
if( in_array($dow, $days) ){
// make a copy to return in results
$results[]=clone $ctime;
}
// incrememnt by 1 day
//$ctime=date_add($ctime, date_interval_create_from_date_string('1 days'));
$ctime->modify("+1 days");
}
return $results;
}
// get every Tues, Wed, Fri from now to End of June
getDates('2011-06-15','2011-06-30',array(2,3,5));
答案 1 :(得分:0)
您应该可以使用strtotime()
获取日期。它接受next Tuesday
之类的参数,并将2011-06-15
解析为正确的时间戳。是的,你需要一个(或多个)循环。
这足以指出你正确的方向。
好的,你在我写答案时更新了你的问题。你不能假设一天总有86400秒。当DST开始或结束时,您的假设将是不正确的。
答案 2 :(得分:0)
<?php
$start = "1 Jan 2011";
$end = "20 Jan 2011";
$dates = getDays($start, $end);
print_r($dates);
function getDays($start,$end)
{
$t = new DateTime("$start 12:00");
$e = new DateTime($end ." 12:00");
$out = array();
for (; $t<=$e; $t->modify("+1 day")) {
$day = $t->format("D");
if (in_array($day, array('Mon','Wed','Fri'))) {
$out[] = $t->format('d M Y');
}
}
return $out;
}