2016-06-03 3 views
0

PHP 기반 웹 응용 프로그램에서 사용자가 제공 한 정수 값을 기반으로 연도 및 월 목록을 생성하려고했습니다. 이 일을하는 동안 나는 2038 년 버그에 직면했다. 1970 년 루프가 2038 년에 도달했을 때 1970 년으로 리셋되었다. 내가 사용하고있는 PHP 버전은 5.4이고 내가 찾은이 솔루션을이 link에서 찾았지만 나에게는 효과가 없다. , 누군가가 PHP에서 2038 버그에 대한 다른 해결책을 시도 했습니까?루프에서 추가하는 동안 2038 년에 php - date가 1970 년으로 재설정되었습니다.

$i = 1; 
$Tenurein = 360; 
while ($i < $Tenurein) { 
    $MonthArr[] = date('F', strtotime($date2)); 
    $YearArr[] = date('Y', strtotime($date2)); 
    $date = new DateTime($date2); 
    $date->add(new DateInterval('P1M')); 
    $dateMon = $date->format('Y-m-d'); 
    $date2 = $dateMon; 
    $i++; 
} 

:

여기 내 PHP 코드입니다.

+1

이것은 잘 알려진 문제점 https://en.wikipedia.org/wiki/Year_2038_problem –

+0

이 문제를 극복하기위한 PHP의 해결 방법이 있습니까? – krishna89

+1

유닉스 타임 스탬프보다 덜/더 많은 것을 처리 할 수있는'DateTime' 객체를 사용합니다. – vaso123

답변

1

PHP 버전 5.6을 사용하고 있습니다. 코드 생성 출력 View output

<?php 
$i = 1; 
$Tenurein = 360; 
$date2 = date('Y-m-d'); 
while ($i < $Tenurein) { 
    $MonthArr[] = date('F', strtotime($date2)); 
    $YearArr[] = date('Y', strtotime($date2)); 
    $date = new DateTime($date2); 
    $date->modify('+1 month'); 
    echo $dateMon = $date->format('Y-m-d'); 
    $date2 = $dateMon; 
    $i++; 
    echo "<br>"; 
} 
?> 

아래 우리는이 문제에 관한 글을 많이 볼 수 있었다. 날짜 표시에는 문제가없는 것 같습니다. 그러나 데이터베이스에 저장하는 동안 나는 똑같은 문제에 직면했다. timestamp 데이터 유형을 사용하는 경우 datetime으로 변경하십시오. 효과가있을 것입니다.

+0

문제는 다른 곳에서도'strtotime'을'DateTime'으로 변경하는 것을 놓쳤습니다. – krishna89