>백엔드 개발 >PHP 튜토리얼 >strtotime('- x Month') 버그에 대한 PHP 솔루션

strtotime('- x Month') 버그에 대한 PHP 솔루션

高洛峰
高洛峰원래의
2016-11-22 17:16:181655검색

이전에 프로젝트를 개발할 때 strtotime("- 1개월")을 사용할 때 버그가 발생했는데, 주된 이유는 PHP에서 설정하는 기본 시간이 그리니치 시간대를 기준으로 하기 때문입니다. 해결 방법은 두 가지가 있습니다. 이 문제의 경우 첫 번째는 php.ini에서 기본 시간대를 수정하는 것이고, 두 번째는 프로그램에서 설정하는 것입니다

첫 번째 방법인 php에서 기본 시간대를 수정하는 방법을 먼저 말씀드리겠습니다. ini

제가 사용하는 wamp 통합환경은 항상 기본 시간대가 bin/php/php5.5.12로 수정된 줄 알았는데, 어떻게 수정해도 그리니치 시간대의 시간이 그대로 나오더군요. 표시되고 온라인에서 해당 솔루션을 찾을 수 없었고 나중에 bin/apache/apache2.4.9/bin에서 php.ini 파일을 찾았으며 파일의 시간대를 date.timezone = PRC로 설정하고 시간을 설정했습니다. 페이지에 표시되는 시간은 내 시스템 시간과 동일합니다.

설정 방법은 php.ini 파일의 시간대를 우리 지역의 시간으로 수정하는 것입니다. 예를 들어 date.timezone = PRC를 수정한다는 것은 시간을 중화인민공화국 시간으로 설정한다는 의미입니다. , 이는 우리 시스템의 현재 시간입니다. 참고: 설정한 시간대를 적용하려면 앞의 ;를 제거해야 합니다.

두 번째 방법은 date_default_timezone_set('PRC');

예를 들어

date_default_timezone_set('PRC');/ /This를 추가하는 것입니다. 문장은 시간차를 없애기 위해 사용됩니다
$date = date("Y-m-d H:i:s");

echo $date; //Output

?>

이렇게 하면 현재 시간을 출력할 수 있습니다.

이제 또 다른 문제가 있습니다. 시간이 2016-03-31일 때 위의 방법을 사용하여 이전 달의 시간을 얻으면 얻은 시간은 여전히 ​​2016-03이기 때문입니다. 이 방법은 먼저 이전 달의 일수를 구한 다음 오늘 시간을 이용하여 이전 달의 일수를 빼는 것입니다.

원하는 결과를 얻는 데 도움이 될 수 있는 몇 가지 방법이 아래에 있습니다. 예를 들어 지난달의 달을 반환하려고 합니다.
echo date('Y-m', strtotime('midnight first) day of -1 Month'));
또는:
echo date('Y-m', strtotime(date('Y-m-01')) – 86400);

또는 다음을 수행합니다. 프로그램에서 다음 처리

date_default_timezone_set('Asia/Shanghai');
$first_day_of_month = date('Y-m',time()) '-01 00 :00:01' ;
$t = strtotime($first_day_of_month);
print_r(array(

date('Y년 m월',$t),
date(' Y년 m월' ,strtotime('- 1개월',$t)),
date('Y년 m월',strtotime('- 2개월',$t)),
));
?> ;

이를 수행하는 원리는 매월 연도와 월을 구분하고 마지막에 일, 시, 분, 초를 추가하는 것입니다. '- 1개월',$t) 연산으로 전월의 시간을 표시할 수 있습니다.

또 다른 참고 사항:

시간 처리를 위해 strtotime(date("Y-m-d h:i:s"))를 사용할 때 여기에 있는 문자는 대소문자를 구분합니다.

h 소문자 h는 시간대 17시를 5시로 출력합니다. 대문자 H는 17,

을 출력하고 연도 y는 대소문자를 구분하며 소문자 y는 13을 출력합니다. Capital Y는 2013년을 산출합니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.