PHP에서 두 datetime 사이의 간격 초를 얻습니까?
2009-10-05 18:11:08
2009-10-05 18:07:13
이것은 235를 생성해야합니다.
이를 위해 strtotime () 을 사용할 수 있습니다 .
$diff = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13')
비슷한 접근 방식이 DateTime 객체로 가능합니다.
$date = new DateTime( '2009-10-05 18:07:13' );
$date2 = new DateTime( '2009-10-05 18:11:08' );
$diff = $date2->getTimestamp() - $date->getTimestamp();
DateTime 개체를 사용하면 다음과 같이 할 수 있습니다.
$date = new DateTime( '2009-10-05 18:07:13' );
$date2 = new DateTime( '2009-10-05 18:11:08' );
$diffInSeconds = $date2->getTimestamp() - $date->getTimestamp();
PHP 날짜 시간 참조는 다음과 같은 경우에 유용합니다. PHP 날짜 시간 함수
strtotime () 이 아마도 가장 좋은 방법 일 것입니다.
$seconds = strtotime('2009-10-05 18:11:08') - strtotime('2009-10-05 18:07:13')
유닉스 시대의 제한으로 인해 1970 년 이전과 2038 년 이후의 날짜를 비교하는 데 문제가있을 수 있습니다. 저는 정밀도를 느슨하게 선택하고 (= 1 초를 보지 않음) unix 시대 변환 (getTimestamp)을 통과하지 않도록 선택합니다. 당신이 무엇을하는지에 따라 다릅니다.
제 경우에는 365 (12 * 30)를 사용하고 평균 월 길이로 "30"을 사용하면 사용 가능한 출력에서 오류가 감소했습니다.
function DateIntervalToSec($start,$end){ // as datetime object returns difference in seconds
$diff = $end->diff($start);
$diff_sec = $diff->format('%r').( // prepend the sign - if negative, change it to R if you want the +, too
($diff->s)+ // seconds (no errors)
(60*($diff->i))+ // minutes (no errors)
(60*60*($diff->h))+ // hours (no errors)
(24*60*60*($diff->d))+ // days (no errors)
(30*24*60*60*($diff->m))+ // months (???)
(365*24*60*60*($diff->y)) // years (???)
);
return $diff_sec;
}
"평균"수량이 diff에 해당하는 경우 오류는 0이 될 수 있습니다. PHP 문서는 이것에 대해 말하지 않습니다 ... 나쁜 경우 오류는 다음과 같습니다.
- 1 개월 미만의 시간 간격에 diff가 적용되는 경우 0 초
- 1 개월을 초과하는 시간 간격에 diff를 적용하는 경우 0 ~ 3 일
- 1 년을 초과하는 시간차에 diff가 적용되는 경우 0 ~ 14 일
나는 누군가가 "m"을 30 일로, "y"를 365로 간주하고 "diff"가 30 일이 아닌 달을 걸을 때 차이를 "d"로 청구했다고 가정하는 것을 선호합니다.
누군가 이것에 대해 더 알고 있고 공식 문서를 제공 할 수 있다면 환영합니다!
strtotime("2009-10-05 18:11:08") - strtotime("2009-10-05 18:07:13")
실제 현지 시차가 필요하고으로 작업 getTimestamp
하려면 계산 된 기간 동안 DST 스위치를 고려해야합니다. 따라서 UTC에 대한 로컬 오프셋이 방정식에 포함되어야합니다.
예를 들어 다음 날짜를 고려하십시오.
$tz = new \DateTimeZone("Europe/Berlin");
$start = new \DateTime("2018-02-01 12:00:00", $tz);
$end = new \DateTime("2018-04-01 12:00:00", $tz);
$start
UTC로 "2018-02-01 11:00:00"이고 UTC $end
로 "2018-04-01 10:00:00"입니다. 베를린 시간대에서는 시간이 동일하지만 UTC에서는 다릅니다. UTC 오프셋은에서 1 시간,에서 $start
2 시간입니다 $end
.
getTimestamp
항상 UTC를 반환 한다는 점을 명심하십시오 ! 따라서 실제 로컬 차이를 찾을 때 타임 스탬프에서 오프셋을 빼야합니다.
// WRONG! returns 5094000, one hour too much due to DST in the local TZ
echo $end->getTimestamp() - $start->getTimestamp();
// CORRECT: returns 5090400
echo ($end->getTimestamp() - $end->getOffset()) - ($start->getTimestamp() - $start->getOffset());
간단하고 정확한 솔루션 (Nilz11의 설명 예시) :
$hiDate = new DateTime("2310-05-22 08:33:26");
$loDate = new DateTime("1910-11-03 13:00:01");
$diff = $hiDate->diff($loDate);
$secs = ((($diff->format("%a") * 24) + $diff->format("%H")) * 60 +
$diff->format("%i")) * 60 + $diff->format("%s");
참고 URL : https://stackoverflow.com/questions/1519228/get-interval-seconds-between-two-datetime-in-php
'development' 카테고리의 다른 글
MySQL GROUP BY 두 열 (0) | 2020.12.13 |
---|---|
파이썬의 주어진 색인에 주어진 문자열에 문자열을 삽입하십시오. (0) | 2020.12.13 |
자바 스크립트를 사용하여 24 시간 시간을 오전 및 오후 12 시간 시간으로 변환 (0) | 2020.12.13 |
숫자 (숫자 및 소수점) 만 입력하도록 허용하는 방법은 무엇입니까? (0) | 2020.12.13 |
PHP에서 숫자 기호 변경? (0) | 2020.12.13 |