Php 星期一、二等

Php 星期一、二等,php,datetime,Php,Datetime,我如何在这两个日期之间回显星期一/星期三/星期五的所有日期 这就是我一直从事的工作: function get_days ( $s, $e ) { $r = array (); $s = strtotime ( $s . ' GMT' ); $e = strtotime ( $e . ' GMT' ); $day = gmdate ( 'l', $s ); do { $r[] = $day . ', ' . gmdate

我如何在这两个日期之间回显星期一/星期三/星期五的所有日期

这就是我一直从事的工作:

    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 ) );
函数获取天数($s,$e)
{
$r=array();
$s=标准时间($s.GMT');
$e=标准时间($e'GMT');
$day=gmdate('l',$s);
做
{
$r[]=$day.,'.gmdate('Y-m-d',$s);
$s+=86400*7;

}while($s您应该能够使用获得天数。它接受参数,如
nextbeday
,并将
2011-06-15
解析为正确的时间戳。是的,您需要一个(或多个)循环

这应该足以为您指明正确的方向

好的,你在我写答案时更新了你的问题。你不能假设一天总有86400秒。当DST开始或结束时,你的假设将不正确。

尝试以下方法:

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));
函数getDates($start\u date,$end\u date,$days){ //分析$start_date和$end_date字符串值 $stime=新日期时间($start\u date); $etime=新日期时间($end_date); //复制一份,这样我们就可以按日递增 $ctime=克隆$stime; $results=array(); 而($ctime格式(“w”); //假设$days是包含Sun(0)-Sat(6)的整数的数组 如果(在数组中($dow,$days)){ //复制以返回结果 $results[]=克隆$ctime; } //增加1天 //$ctime=date\u add($ctime,date\u interval\u create\u from\u date\u string('1天'); $ctime->修改(“+1天”); } 返回$results; } //从现在到六月底,每周二、周三、周五 getDates('2011-06-15','2011-06-30',数组(2,3,5));
也许你应该试着写一些东西,看看它是否有效。我已经搜索并尝试过了,请阅读我文章的最后一句。显示你尝试过的代码…这看起来很有希望,但调用未定义的函数date\u add()需要PHP5.3-你的版本是什么?5.2.6现在就要升级了好吧-如果你不能,我可以做
date\u add()
replacement。你能试试吗?我在开发服务器上编写代码,升级的唯一方法是重新安装xampp,所以我必须备份近20gb的数据,这不是很多,但它的20gb分布在50万个文件中
<?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;
}