ヘイ、私はイベントを保持するデータベースを持っています。 「開始」と「終了」の2つのフィールドがあり、これらにはタイムスタンプが含まれています。管理者がこれらの日付を入力すると、日、月、年のみを設定することができます。したがって、時間、分、秒ではなく、日、月、年を含むスタンプのみを処理します(時間、分、および秒は0,0,0に設定されます)。
開始時刻が1262304000で終了時刻が1262908800のイベントがあります。これらは2010年1月1日と2010年1月8日に変換されます。これらのタイムスタンプ間のすべての日を取得するにはどうすればよいですか? 2010年1月2日(1262390400)、2010年1月3日(1262476800)..終了スタンプまで返せるようにしたい。これらのイベントは、5月28日から6月14日など、異なる月にまたがることがあります。
これを行う方法はありますか?
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番目の引数)を使用できます。
これに対する簡単な回避策は、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;
}
これは、たとえ数か月以上かかったとしても、あらゆる時間枠をカバーするはずです。
これを試して:
while($date_start <= $date_end) {
echo date('M d Y', $date_start) . '<br>';
$date_start = $date_start + 86400;
}
お役に立てれば !
_$daysInBetween = range($startTs, $endTs, 86400);
$secondDay = date('M d Y', $daysInBetween[1]);
/*
$thirdDay = date('M d Y', $daysInBetween[2]);
...
*/
_
range()
関数は包括的であることに注意してください。
$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>";
**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";
このようなもの?
$day = $start;
while ($day < $end) {
$day += 86400;
echo $day.' '.date('Y-m-d', $day).PHP_EOL;
}
ちなみに、1262304000は1月1日ではなく12月31日です。
2つの日付の差を取得し、86400で除算します。abs(($ date1-$ date2)/ 86400)は必要な結果を生成します