아니요 표준 사이의 날짜가 아닌 +86400 초입니다.PHP의 두 유닉스 타임 스탬프 사이의 실제 일수
$start_time = strtotime("2012-01-15 23:59");
$end_time = strtotime("2012-01-16 00:05");
$ daysInBetweenTimestamps =?
타임 스탬프가 5 분에서 5 시간 사이의 범위 일 수 있으므로 현재 문제가 있습니다. 표준 이상으로 86400을 사용하면 하루 이상 작동하는지 확인할 수 없습니다. 엄청난 양의 색인 생성 두 번째 수준에서 날짜 ("d")> $ prevDay 대신 새로운 날이 시작되었는지 확인하는 더 효율적인 방법이 있는지보고 싶습니다. 첫 번째 예에 대한 시험과 함께 업데이트
:
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 개 스타트 ===에게
0 days
Single day so log files are NOT split
다음과 같이
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 />";
}
}
}
출력 보인다 나는 diff에서 뭔가를 놓치고 있습니까?
=== 예 1 END ===
=== 예 3의 START ===
Number of days:1
Multiple days so log files are split
=== 예 3 END ===
86400 초가 경과하지 않은 경우 두 개의 시간 소인 사이의 일 수를 알려주지 않았습니다. 당신이 준 예제 날짜에 대해 어떤 결과물을 원하십니까? 문제를 정확하게 기술하십시오. –
날짜를 얻는 한 가지 방법은 시작과 끝, 예 :'if (date ("d", $ end_time)> date ("d", $ start_time)) {$ multiDays = true;}에서 테스트하는 것입니다. '그리고 나서 각각의 마지막 두 번째 카운트와 루프를 반복하는 것이 가장 효율적인 방법입니까? –
문제는 이것입니다 ... 아파치 로그 파일은 매일 로테이션되고 access_log.2012.11.15의 형식으로 저장됩니다. 내 인덱서 응용 프로그램은 유닉스 타임 스탬프 시작 및 종료 시간이 걸립니다. 여러 날에 걸쳐있을 수 있습니다. 대신 PHP를 수동으로 전체 파일을 읽는 데 사용하기 위해 유닉스 도구 * exec * 명령을 사용합니다. 그래서 for 루프를 보았습니다. 새로운 로그 파일 php로이 로그 파일을 읽지 않는 이유 중 일부는 2 + gig 크기이고 php는 256MB이므로 작은 사용자 정의 시간 간격으로 인덱스를 작성하려고합니다 –