남은일수 계산 채택완료
<?php
date_default_timezone_set('Asia/Seoul');
$firstDate = new DateTime('2022-03-01');
$secondDate = new DateTime('2022-03-31');
$intvl = $firstDate->diff($secondDate);
echo $intvl->y . " year, " . $intvl->m." months and ".$intvl->d." day";
echo "\n";
// Total amount of days
echo $intvl->days . " days ";
//output: 0 year, 1 months and 2 day
// 30 days
3월 한달을 계산했는데 1개월이 아닌 1개월 2일로 계산되어 나옵니다 ㅠㅠ
timezone 을 UTC로 변경하면 30일로 나오게 되고
여기서 secondDate를 2022-04-01로 바꾸면 1개월로 나옵니다.
<?php
//date_default_timezone_set('Asia/Seoul');
date_default_timezone_set('UTC');
$firstDate = new DateTime('2022-03-01');
$secondDate = new DateTime('2022-03-31');
$intvl = $firstDate->diff($secondDate);
echo $intvl->y . " year, " . $intvl->m." months and ".$intvl->d." day";
echo "\n";
// Total amount of days
echo $intvl->days . " days ";
//output: 0 year, 0 months and 30 day
// 30 days
적용중인 코드입니다. 어떻게 해야 3월 한달을 1개월로 인식하게 할수있을까요?
답변 3개
확인해보니 DST처리 오류로 인한 문제라고 합니다.
예전부터 있던 문제인데 아직 처리가 명확하지 않다고 합니다.
일광 절약 시간제(日光節約時間制, 미국 영어: Daylight saving time, DST) 또는 써머 타임(영국 영어: summer time)
제가 테스트한 서버 2개가 결과가 상이하길래 확인해봤습니다.
차이가 없었던건 웹기반 PHP 에뮬레이터였고
차이가 질문자님과 동일했던건 php7.3 설치된 서버였습니다.
해결방법은 날짜의 차이를 diff 로 계산할떄 UTC로 타임존을 설정 하라네요.
https://fullstackuser.com/code-snippets/phps-datetimediff-gets-it-wrong
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
정상적인 서버 기준으로
Asia/Seoul 로 타임존을 설정했을때도 동일하게 출력됩니다.
위 타임존에서 이상하게 뜬다면 서버의 시간동기화를 한번 해보세요.
제가 위 코드로 테스트해봤을때
타임존에 따른 계산 차이는 제 서버에는 없었습니다.
답변에 대한 댓글 1개
Thu Mar 31 12:54:13 KST 2022
2022-03-01 00:00:00
2022-03-31 23:59:59
으로 테스트값을 세팅 후 결과가 0 year, 1 months and 2 day 이렇게 나와요
댓글을 작성하려면 로그인이 필요합니다.
2022-03-01 00:00:00
2022-03-31 23:59:59
30일 맞습니다. 1초가 부족하거든요.
2022-03-01 00:00:00
2022-04-01 00:00:00
이 기준이 1month 겠죠
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인