【问题标题】:How to skip the dates of an array and increment date by +1?如何跳过数组的日期并将日期增加 +1?
【发布时间】:2015-12-24 04:39:34
【问题描述】:

我在下面使用 PHP 编写了几行代码,我试图通过获取天数并按天数递增日期来在 for 循环中传递一个日期,例如:我有 09-12-2015 和否天是 3,那么我将得到 09-12-2015,10-12-2015,11-12-2015 的输出。接下来我使用其他条件,如果 $holidy_dates 数组中已经存在日期,我需要按日期递增。

$need_leave_date = "09-12-2015";     
$no_day = 6;
$holidy_dates = array('2015-12-11','2015-12-13');

$dates=array();  
for($i = 1; $i<$no_day; $i++)
{

    $leave_dates     =  date('Y-m-d', strtotime("+1 day", strtotime($leave_dates)));

    if($holidates_dates[$i] == $leave_dates) {
            $leave_dates     =  date('Y-m-d', strtotime("+1 day", strtotime($leave_dates)));
          //array_push($dates,$leave_dates);


    }
    else {       
        array_push($dates,$leave_dates);
        //  continue;
    }       


}


   //IMPLODE ALL THE DATES
   $implode_dates = implode(',', $dates); 
   echo $implode_dates;

我需要的例子:

  09-12-2015,10-12-2015,12-12-2015,14-12-2015,15-12-2015,16-12-2015

此处跳过 $holidy_dates 数组中的可用日期。

但对我来说是这样的:

  2015-12-10,2015-12-11,2015-12-12,2015-12-13,2015-12-14

【问题讨论】:

    标签: php mysql arrays date


    【解决方案1】:

    在这里它会起作用:

    $need_leave_date = "09-12-2015";     
    $no_day = 6;
    $holidy_dates = array('2015-12-11','2015-12-13');
    $dates=array();  
    $i = $no_day;
    $date = date( 'Y-m-d', strtotime($need_leave_date) );
    while ( $i != 0 )
    {
        if( !in_array( $date, $holidy_dates  ) ) {
            array_push($dates,$date);
            $i--;
        }
        $date = date( 'Y-m-d', strtotime($date . '+1 day') );
    }
    
    $implode_dates = implode(',', $dates);
    
    echo $implode_dates;
    

    对于多维数组:

    $need_leave_date = "09-12-2015";     
    $no_day = 6;
    $holidy_dates = array(
                    array( 'gh_date' => "2015-12-11"), 
                    array( 'gh_date'=> "2015-12-13")
                );
    $dates=array();  
    $i = $no_day;
    $date = date( 'Y-m-d', strtotime($need_leave_date) );
    while ( $i != 0 )
    {
        if( !in_array_r( $date, $holidy_dates  ) ) {
            array_push($dates,$date);
            $i--;
        }
        $date = date( 'Y-m-d', strtotime($date . '+1 day') );
    }
    
    $implode_dates = implode(',', $dates);
    
    echo $implode_dates;
    
    function in_array_r($needle, $haystack, $strict = false) {
        foreach ($haystack as $item) {
            if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
                return true;
            }
        }
    
        return false;
    }
    

    【讨论】:

    • 如果我有 $holidy_dates = array('2015-12-11','2015-12-13'); 像这样,那我怎么能 Array ( [0] => stdClass 对象 ( [gh_date] => 2015-08-15 ) [1] => stdClass 对象 ( [gh_date] => 2015-12-06 ) [2] => stdClass 对象 ( [gh_date] => 2015-01-26 ) [3] => stdClass Object ( [gh_date] => 2015-05-01 ) ) 它直接从数据库中获取
    • 如何从数据库中获取行?是否使用 mysql_fetch_object() 函数?
    • 是的,我有一个由类定义的 get_results 函数,它的返回如上,或者如果有任何函数获取为 array('2015-12- 11','2015-12-13'); 型号
    • 尝试使用 mysql_fetch_array() 或 mysql_fetch_assoc() 并查看其输出
    • 它的返回如下:Array ([0] => Array ([gh_date] => 2015-08-15) [1] => Array ([gh_date] => 2015- 12-06 ) [2] => 数组 ( [gh_date] => 2015-01-26 ) [3] => 数组 ( [gh_date] => 2015-05-01 ) )
    【解决方案2】:

    这里是解决方案。试试这个。

    <?php
        $need_leave_date = "09-12-2015";     
        $no_day = 6;
        $holidy_dates = array('2015-12-11','2015-12-13');
    
        $dates=array();  
        $i=1;
        while($i<=$no_day){
            if($leave_dates){
                $leave_dates = date('Y-m-d', strtotime("+1 day", strtotime($leave_dates)));
            }else{
                $leave_dates = date('Y-m-d', strtotime($need_leave_date));
            }
    
            if(in_array($leave_dates, $holidy_dates)){
                // do nothing
            }else{
                array_push($dates,$leave_dates);
                $i++;
            }
        }
        //IMPLODE ALL THE DATES
        $implode_dates = implode(',', $dates); 
        echo $implode_dates;
    ?>
    

    输出

    2015-12-09,2015-12-10,2015-12-12,2015-12-14,2015-12-15,2015-12-16
    

    【讨论】:

    • 如果我有 $holidy_dates = array('2015-12-11','2015-12-13'); 像这样,那我怎么能 Array ( [0] => stdClass 对象 ( [gh_date] => 2015-08-15 ) [1] => stdClass 对象 ( [gh_date] => 2015-12-06 ) [2] => stdClass 对象 ( [gh_date] => 2015-01-26 ) [3] => stdClass Object ( [gh_date] => 2015-05-01 ) ) 它直接从数据库中获取
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 2023-01-21
    • 2011-07-05
    相关资源
    最近更新 更多