1

私は現在、個人用のカレンダー スクリプトに取り組んでいます。したがって、私はあなたの助けが必要です:-)

YYYY-MM-DD の形式で 2 つの日付があります。

例えば:

2012-05-12 and
2012-05-16

私が必要とするのは、それらの間の日付です:

2012-05-13
2012-05-14
2012-05-15

出力は配列にする必要があります。とにかくどうやって始めればいいのかわからないので、ヒントはありますか?

4

5 に答える 5

5

OOPアプローチは次のとおりです。使用する必要があります。

$a = new DateTime('2012-05-12');
$b = new DateTime('2012-05-16');

// to exclude the end date (so you just get dates between start and end date):
// $b->modify('-1 day');

$period = new DatePeriod($a, new DateInterval('P1D'), $b, DatePeriod::EXCLUDE_START_DATE);

foreach($period as $dt) {
  echo $dt->format('Y-m-d');
}

詳細については、 DateTimeDateInterval、およびDatePeriodを参照してください。

于 2012-07-12T12:18:50.320 に答える
3
$date =  date("Y-m-d", strtotime("2012-05-12"));
$final_date = date("Y-m-d", strtotime("2012-05-16"));
while($date < $final_date){
   $date = date("Y-m-d", strtotime($date . " +1 day"));
   $dates[] = $date;
}
于 2012-07-12T12:15:41.883 に答える
1
function getDates($startTime, $endTime) {
    $day = 86400;
    $format = 'Y-m-d';
    $startTime = strtotime($startTime);
    $endTime = strtotime($endTime);
    //$numDays = round(($endTime - $startTime) / $day) + 1;
    $numDays = round(($endTime - $startTime) / $day); // remove increment 

    $days = array();

    for ($i = 1; $i < $numDays; $i++) { //change $i to 1
        $days[] = date($format, ($startTime + ($i * $day)));
    }

    return $days;
}

$days = getDates('2012-05-12', '2012-05-16');

出力:

Array
(
    [0] => 2012-05-13
    [1] => 2012-05-14
    [2] => 2012-05-15
)

ダン・リーが言ったように、配列から最初と最後の日を除いて、日付間隔のみを取得するように関数を変更しました。

于 2012-07-12T12:19:49.533 に答える
1
function GetDays ($sStartDate, $sEndDate ) {  
  $sStartDate = gmdate( 'Y-m-d', strtotime( $sStartDate ) );  
  $sEndDate = gmdate( 'Y-m-d', strtotime( $sEndDate ) );  

  $aDays[] = $sStartDate;  

  $sCurrentDate = $sStartDate;  

  while( $sCurrentDate < $sEndDate ) {  
    $sCurrentDate = gmdate( 'Y-m-d', strtotime( '+1 day', strtotime( $sCurrentDate) ) );  

    $aDays[] = $sCurrentDate;  
  }  

  return $aDays;  
}  

print_r ( '2012-05-12', '2012-05-16' );
于 2012-07-12T12:17:19.920 に答える
0

コードは次のとおりです。

function createDateRangeArray($strDateFrom,$strDateTo)
    {
        // takes two dates formatted as YYYY-MM-DD and creates an
        // inclusive array of the dates between the from and to dates.

        // could test validity of dates here but I'm already doing
        // that in the main script

        $aryRange=array();

        $iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2),     substr($strDateFrom,8,2),substr($strDateFrom,0,4));
        $iDateTo=mktime(1,0,0,substr($strDateTo,5,2),     substr($strDateTo,8,2),substr($strDateTo,0,4));

        if ($iDateTo>=$iDateFrom)
        {
            array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry
            while ($iDateFrom<$iDateTo)
            {
                $iDateFrom+=86400; // add 24 hours
                array_push($aryRange,date('Y-m-d',$iDateFrom));
            }
        }
        return $aryRange;
    }

こちらのサイトを参考にさせていただきました。

于 2012-07-12T12:20:20.010 に答える