问题描述
|
如何在这两个日期之间的星期一/星期三/星期五回荡所有日期?
这就是我一直在与的工作:
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 ) );
解决方法
尝试这个:
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));
, 您应该能够使用strtotime()
获得日子。它接受诸如“ 3”之类的参数,并且还将“ 4”解析为正确的时间戳。是的,您需要一个(或多个)循环。
这应该足以为您指明正确的方向。
好的,您在我写答案时更新了问题。您不能假设一天总有86400秒。 DST开始或结束时,您的假设将是错误的。
, <?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;
}