これは日付間の+ 86400秒の標準ではありません。PHPの2つのUNIXタイムスタンプ間の実際の日数
$start_time = strtotime("2012-01-15 23:59");
$end_time = strtotime("2012-01-16 00:05");
$ daysInBetweenTimestamps =?
これはタイムスタンプが5分から5時間の時間間隔の範囲内にある可能性があるため、標準の+86400を使用して1日以上経過していないかどうかを確認することができます私がやっている索引作成の大量化2番目のレベルで日付( "d")> $ prevDayを実行するのではなく、新しい日が始まったかどうかを確認するより効率的な方法があるかどうかを確認したいと考えています。
第例えば試験と更新次のよう
echo "Absolute Start: ".date("Y-m-d H:i:s",$start)."<br />";
echo "Absolute End: ".date("Y-m-d H:i:s",$end)."<br />";
echo "Interval Used: $interval(seconds) OR ".($interval/60)."(minutes)<br />";
$numberOfIntervals = ceil(($end - $start)/$interval);
echo "Number of intervals:$numberOfIntervals<br /><br />";
if ($numberOfIntervals > 0){
for ($i = 0; $i < $numberOfIntervals; $i++){
$curStart = $start + ($interval * $i);
$curEnd = $curStart + $interval;
if ($curEnd > $end){$curEnd = $end;}
echo "Interval Start DateTime: ".date("Y-m-d H:i:s",$curStart)."<br />";
echo "Interval End DateTime: ".date("Y-m-d H:i:s",$curEnd)."<br />";
/* EXAMPLE PHP5.3 DateTime START - NOT WORKING */
$startDiff = new DateTime("@$curStart");
$endDiff = new DateTime("@$curEnd");
$diff = $startDiff->diff($endDiff);
echo $diff->format("%a") . " days<br />";
if ($diff->format("%a") > 0){
/* EXAMPLE PHP5.3 DateTime END */
/* EXAMPLE Julian START - WORKS */
$days = unixtojd($curEnd) - unixtojd($curStart);
echo "Number of days:$days<br />";
if ($days > 0){
/* EXAMPLE Julian END */
// Multiple days so the log files are split
echo "Multiple days so log files are split<br />";
}else{
echo "Single day so log files are NOT split<br />";
}
}
}
出力が見える:
Absolute Start: 2012-01-25 23:59:00
Absolute End: 2012-01-26 00:02:00
Interval Used: 180(seconds) OR 3(minutes)
Number of intervals:1
Interval Start DateTime: 2012-01-25 23:59:00
Interval End DateTime: 2012-01-26 00:02:00
===実施例1 START ===
0 days
Single day so log files are NOT split
私はdiffに何かを見逃していますか?
===実施例1 END ===
===実施例3 START ===
Number of days:1
Multiple days so log files are split
===実施例3 END ===
2つのタイムスタンプの間の日数は、86400秒が経過していない場合は何も教えてくれませんでした。あなたが与えた日付の例に対して、どんな出力をしたいですか?問題を正確に述べる。 –
日付を取得する方法の1つは、開始日と終了日をテストすることです。例: 'if(date(" d "、$ end_time)> date(" d "、$ start_time)){$ multiDays = true;}それでは、これは最も効率的な方法ですか? –
これは問題です... Apacheログファイルは毎日ローテーションされ、access_log.2012.11.15の形式で保存されます。私のインデクサーアプリはUNIXのタイムスタンプの開始時刻と終了時刻を取るでしょう。複数日にわたることがあります。 PHPを手動でファイル全体を読み込ませるのではなく、私はこれを行うためにUNIXのツール* exec *コマンドを使用しています...だから、私のforループでは、見たい日の変更があればキャッチする方法を見つける必要があります新しいログファイルなぜなら、これらのログファイルをPHPで読んでいない理由のいくつかは、サイズが2 +ギガバイトであり、phpは256mbなので小さなユーザー定義のタイムスパンでインデックスを作成しようとしています。 –