Нет, это не стандарт +86400 секунд между датами.Фактические дни между двумя временными метками unix в PHP
$start_time = strtotime("2012-01-15 23:59");
$end_time = strtotime("2012-01-16 00:05");
$ daysInBetweenTimestamps =?
Это проблема, с которой я сейчас сталкиваюсь, поскольку временные метки могут варьироваться от 5 минут до 5-часового временного интервала, например, с использованием стандартного +86400, чтобы узнать, не будет ли это более суток, и из-за огромное количество индексирования, которое я делаю, я хотел бы посмотреть, есть ли более эффективный способ проверить, начался ли новый день вместо того, чтобы делать дату («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
Я просто что-то пропустил на разнице?
=== Пример 1. КОНЕЦ ===
=== Пример 3. ПУСК ===
Number of days:1
Multiple days so log files are split
=== Пример 3. КОНЕЦ ===
Вы не сказали нам, какое количество дней между двумя временными метками, если не прошло столько раз 86400 секунд. Какой вывод вы хотите для дат примера, которые вы указали. Сформулируйте проблему точно. –
Одним из способов получения дат будет выполнение теста в начале и в конце, например: if (date ("d", $ end_time)> date ("d", $ start_time)) {$ multiDays = true;} 'А затем сделать последнее второе количество каждого дня и цикл между ними, это самый эффективный способ?' –
Итак, проблема в том, что ... Файлы журнала Apache ежедневно вращаются и сохраняются в формате access_log.2012.11.15, моему приложению индексатора потребуется время начала и окончания timestamp unix. который может охватывать несколько дней. Вместо того, чтобы php вручную читать весь файл, я использую unix-инструменты * exec *, чтобы сделать это для меня ... Поэтому в моем цикле for я должен найти способ поймать, если есть изменение дней, чтобы посмотреть на новый файл журнала. Причина не для чтения этих файлов журналов с помощью php - некоторые из них имеют размер 2 + gig, а php имеет 256 Мбайт, поэтому я пытаюсь индексировать при небольшом определенном пользователем времени. –