31

やあ、イベントを保持するデータベースがあります。'start' と 'end' の 2 つのフィールドがあり、これらにはタイムスタンプが含まれています。管理者がこれらの日付を入力すると、日、月、年のみを設定できます。したがって、時、分、秒ではなく、日、月、年を含むスタンプのみを扱います (時、分、秒は 0、0、0 に設定されます)。

開始時刻が 1262304000 で終了時刻が 1262908800 のイベントがあります。これらは 2010 年 1 月 1 日と 2010 年 1 月 8 日に変換されます。これらのタイムスタンプ間のすべての日を取得するにはどうすればよいですか? 2010 年 1 月 2 日 (1262390400)、2010 年 1 月 3 日 (1262476800) を返せるようにしたい .. エンド スタンプまでずっと。これらのイベントは、5 月 28 日から 6 月 14 日など、別の月にまたがる可能性があります。

これを行う方法はありますか?

4

8 に答える 8

52

2つの日付の間の秒数を計算してから、除算して日数を取得する必要があります。

$numDays = abs($smallestTimestamp - $biggestTimestamp)/60/60/24;

次に、forループを使用して日付を取得できます。

$numDays = abs($smallestTimestamp - $biggestTimestamp)/60/60/24;

for ($i = 1; $i < $numDays; $i++) {
    echo date('Y m d', strtotime("+{$i} day", $smallestTimestamp)) . '<br />';
}

ここでも、どのタイムスタンプが最小かわからない場合は、min()関数(strtotimeの2番目の引数)を使用できます。

于 2010-11-02T16:35:37.860 に答える
3

これに対する簡単な回避策は、start_tag に到達するまで、end_stamp から 1 日分の秒数を差し引くことだと思います。

//1 day = 86400 seconds

後で使用する日の配列を作成します。

編集(例)

$difference = 86400;
$days = array();
while ( $start_time < $end_time )
{
    $days[] = date('M j Y', $end_time);

    $end_time -= $difference;
}

これは、数か月にわたる場合でも、任意の時間枠をカバーする必要があります。

于 2010-11-02T16:36:21.980 に答える
2

これを試して:

while($date_start <= $date_end) {
    echo date('M d Y', $date_start) . '<br>';
    $date_start = $date_start + 86400;
}

お役に立てれば !

于 2010-11-02T16:38:00.730 に答える
1
$d1=mktime(22,0,0,1,1,2007);
$d2=mktime(0,0,0,1,2,2007);
echo "Hours difference = ".floor(($d2-$d1)/3600) . "<br>";
echo "Minutes difference = ".floor(($d2-$d1)/60) . "<br>";
echo "Seconds difference = " .($d2-$d1). "<br>";


echo "Month difference = ".floor(($d2-$d1)/2628000) . "<br>";
echo "Days difference = ".floor(($d2-$d1)/86400) . "<br>";
echo "Year difference = ".floor(($d2-$d1)/31536000) . "<br>";

http://www.plus2net.com/php_tutorial/date-diff.php

http://www.phpf1.com/tutorial/php-date-difference.html

于 2010-11-02T16:45:59.237 に答える
1
    **This is a very simple code for find days hours minutes and seconds in php**

    $dbDate = strtotime("".$yourbdDate.""); // Database date
    $endDate = time();    // current time
    $diff = $endDate - $dbDate; /// diffrence

    $days = floor($diff/86400);  ///  number of days 
    $hours = floor(($diff-$days*86400)/(60 * 60));  ////  number of hours
    $min = floor(($diff-($days*86400+$hours*3600))/60);///// numbers of minute


    $second = $diff - ($days*86400+$hours*3600+$min*60); //// secondes

    if($days > 0) echo $days." Days ago";
    elseif($hours > 0) echo $hours." Hours ago";
    elseif($min > 0) echo $min." Minute ago";
    else echo "Just second ago";
于 2013-09-25T08:08:46.720 に答える
1
$daysInBetween = range($startTs, $endTs, 86400);
$secondDay = date('M d Y', $daysInBetween[1]);
/*
$thirdDay = date('M d Y', $daysInBetween[2]);
...
*/

range()関数は包括的であることに注意してください。

于 2010-11-02T18:58:58.127 に答える
0

このようなもの?

$day = $start;
while ($day < $end) {
        $day += 86400;
        echo $day.' '.date('Y-m-d', $day).PHP_EOL;
}

ちなみに、1262304000 は 1 月 1 日ではなく 12 月 31 日です。

于 2010-11-02T16:38:41.643 に答える
0

2 つの日付の差を取得し、86400 で割ります。 abs(($date1 - $date2) / 86400) は必要な結果を生成します。

于 2010-11-02T16:41:23.467 に答える