PHP DateInterval에서 총 시간(초)을 계산합니다.
두 날짜 사이의 총 초수를 계산하는 가장 좋은 방법은 무엇입니까?지금까지 저는 다음과 같은 것을 시도했습니다.
$delta = $date->diff(new DateTime('now'));
$seconds = $delta->days * 60 * 60 * 24;
하지만, 그days
DateInterval 객체의 속성이 현재 PHP5.3 빌드에서 파손된 것 같습니다(적어도 Windows에서는 항상 같은 값을 반환합니다).6015
값)을 설정합니다.또, 매월(라운드로부터 30까지), 윤년등의 일수를 보존할 수 없는 방법으로 시도했습니다.
$seconds = ($delta->s)
+ ($delta->i * 60)
+ ($delta->h * 60 * 60)
+ ($delta->d * 60 * 60 * 24)
+ ($delta->m * 60 * 60 * 24 * 30)
+ ($delta->y * 60 * 60 * 24 * 365);
하지만 나는 이 얼빠진 해결책을 사용하는 것이 정말 마음에 들지 않는다.
대신 타임스탬프를 비교해 주실 수 없을까요?
$now = new DateTime('now');
$diff = $date->getTimestamp() - $now->getTimestamp()
이 함수를 사용하면 DateInterval 개체에서 총 기간(초)을 가져올 수 있습니다.
/**
* @param DateInterval $dateInterval
* @return int seconds
*/
function dateIntervalToSeconds($dateInterval)
{
$reference = new DateTimeImmutable;
$endTime = $reference->add($dateInterval);
return $endTime->getTimestamp() - $reference->getTimestamp();
}
다음과 같이 할 수 있습니다.
$currentTime = time();
$timeInPast = strtotime("2009-01-01 00:00:00");
$differenceInSeconds = $currentTime - $timeInPast;
time()은 에폭 시간(1970-01-01T00:00:00) 이후의 현재 시간을 초 단위로 반환합니다.strtotime은 동일한 작업을 수행하지만 지정한 특정 날짜/시간을 기반으로 합니다.
static function getIntervalUnits($interval, $unit)
{
// Day
$total = $interval->format('%a');
if ($unit == TimeZoneCalc::Days)
return $total;
//hour
$total = ($total * 24) + ($interval->h );
if ($unit == TimeZoneCalc::Hours)
return $total;
//min
$total = ($total * 60) + ($interval->i );
if ($unit == TimeZoneCalc::Minutes)
return $total;
//sec
$total = ($total * 60) + ($interval->s );
if ($unit == TimeZoneCalc::Seconds)
return $total;
return false;
}
DateTime::diff
a를 반환하다DateInterval
두 날짜 사이의 객체.
그DateInterval
object는 모든 정보(일수, 시간, 분, 초)를 제공합니다.
다음은 샘플 코드입니다.
/**
* intervalToSeconds
*
* @param DateInterval $interval
* @return int
*/
function intervalToSeconds(\DateInterval $interval) {
return $interval->days * 86400 + $interval->h * 3600 + $interval->i * 60 + $interval->s;
}
$date_1 = new \DateTime('2021-03-03 05:59:19');
$date_2 = new \DateTime('now');
$interval = $date_1->diff($date_2);
echo intervalToSeconds($interval);
당신이 필요로 하는 것이 이미 수업으로 있을 때 항상 기분이 좋습니다.이 경우 총 초수가 필요합니다.그걸로 수업하는 게 어때?코드는 다음과 같습니다.
(new TotalFullSeconds(
new IntervalFromRange(
new DateTimeFromISO8601String('2017-07-03T14:27:39+00:00'),
new DateTimeFromISO8601String('2017-07-05T14:27:39+00:00')
)
))
->value()
직감적인 것 외에 IDE의 자동 완성 기능을 이용할 수도 있습니다.
보다 유용한 구현을 위해 이 라이브러리를 체크해 보십시오.
(60*60이 아닌 3600을 입력) 하드 수치만 입력하면 매번 계산할 필요가 없습니다.
편집 - 주석을 기준으로 숫자를 수정합니다.
언급URL : https://stackoverflow.com/questions/3176609/calculate-total-seconds-in-php-dateinterval
'programing' 카테고리의 다른 글
쿼리 문자열 내에서 어레이를 전달하려면 어떻게 해야 합니까? (0) | 2022.11.02 |
---|---|
PyTorch에서 모델 요약을 인쇄하려면 어떻게 해야 합니까? (0) | 2022.11.02 |
현재 사용자가 MySQL/MariaDB에 대한 특정 권한을 가지고 있는지 확인하려면 어떻게 해야 합니까? (0) | 2022.11.02 |
phpMyAdmin에서 MySQL 쿼리를 기반으로 CSV 생성 (0) | 2022.11.02 |
MySQL - 기존 데이터를 중단하지 않고 데이터베이스 내 기존 열의 varchar 크기를 늘리는 방법 (0) | 2022.11.02 |