2016-11-28 12 views
5

PHPを使用して日付を分割するにはどうすればよいですか? PHPに組み込まれている関数はありますか?どのようにPHPで日付を分割できますか?

2016-11-01 10:00:00 till 2016-11-03 18:00:00 

私は、必要な日数にして、日付の上に分割する必要があります: -

2016-11-01 10:00:00 till 23:59:59 
2016-11-02 00:00:00 till 23:59:59 
2016-11-03 00:00:00 till 18:00:00 
+1

:59:59'これはから来ていますか? –

+0

@Anantカレンダーから来ます。 –

+5

参照:http://stackoverflow.com/q/4312439/3933332最初に – Rizier123

答えて

5

は、このようなビルトイン機能を提供していません。

しかし、あなたは簡単に目DateTimeオブジェクトでこれを達成することができます。ここで、 `23から

$interval = '2016-11-01 10:00:00 till 2016-11-03 18:00:00'; 
$dates = explode(' till ', $interval); 

if(count($dates) == 2) { 
    $current = $begin = new DateTime($dates[0]); 
    $end = new DateTime($dates[1]); 

    $intervals = []; 

    // While more than 1 day remains 
    while($current->diff($end)->format('%a') >= 1) { 

     $nextDay = clone $current; 
     $nextDay->setTime(23,59,59); 

     $intervals []= [ 
      'begin' => $current->format('Y-m-d H:i:s'), 
      'end' => $nextDay->format('Y-m-d H:i:s'), 
     ]; 
     $current = clone $nextDay; 
     $current->setTime(0,0,0); 
     $current->modify('+1 day'); 
    } 

    // Last interval : from $current to $end 
    $intervals []= [ 
     'begin' => $current->format('Y-m-d H:i:s'), 
     'end' => $end->format('Y-m-d H:i:s'), 
    ]; 

    print_r($intervals); 
} 
+0

ありがとうございます。これは私のために完全に働いています。 –

+0

あなたは大歓迎です:) – Max

3

あなたは結果のようなタイプを達成するためにforループを使用することができます。あなたの要件は、開始日と終了日の1日の差で日付を印刷することです。私はこれのためのコードを書いています。

<?php 
$startDate = strtotime('2016-11-01 10:00:00'); 
$endDate = strtotime('2016-11-03 18:00:00'); 

for ($loopStart = $startDate; $loopStart <= $endDate; $loopStart = strtotime('+1 day', $loopStart)) { 

    // check last date 
    if($endDate >= strtotime('+1 day', $loopStart)){ 
     echo date('Y-m-d', $loopStart).' 23:59:59'; 
    } 
    else{ 
     echo date('Y-m-d', $loopStart).' '.date('H:i:s',$endDate); 
    } 

    echo "<br>"; 

} 

?> 

コードの出力がある - 私の知識のPHPへ

2016-11-01 23:59:59 
2016-11-02 23:59:59 
2016-11-03 18:00:00 
+1

'$ startDate = strtotime( '2016-11-28 07:58:18');を追加しました。 $ endDate = strtotime( '2016-11-29 07:58:18'); '私が得た結果は' 2016-11-28 07:58:18
2016-11-29 07:58:18
'です。この場合、これは正しくありません。 –

+0

私はそれを確認して修正しましょう。 –

+0

この場合、> = in if文を更新する必要があります。 If条件をif($ endDate> = strtotime( '+ 1 day'、$ loopStart)){ –

関連する問題