2012-10-26 2 views
1

Access 데이터베이스를 MySQL로 마이그레이션해야합니다. 두 가지 문제점이 있습니다. 첫째, 연도는 두 자릿수로 지정됩니다. 두 번째는 이것이 생일 데이터베이스라는 것입니다. 예를 들어 다음과 같은 문자열이 있습니다.PHP에서 (아주) 오래된 날짜를 변환하는 방법?

"06/12/76 00:00:00" 
"10/15/02 00:00:00" 

어느 연도가 마지막 1 개월 (10 월 15 일)을 가리 킵니까? 나는 12 이상의 값을 갖는 모든 날짜는 19XX를 언급하고 다른 하나는 0에서 12까지를 20XX라고 부른다.

이 문제가 해결되면이 날짜를 형식화해야합니다. 나는이 시도했습니다 :

$bd = strtotime($birth); 
if ($bd > time()) { 
    $bd = strtotime("-100 years", $bd); 
} 
$birth = sua_date_unix2mysql($bd); 

을하지만 문제는 strtotime이다이 문제를 해결하기 위해 1970 년 어떤 생각 후에 날짜를 관리 할 수있다?

참고 : 날짜 시간을 사용할 수 없습니다 (버전 5.2)

+2

그렇지 않으면 PHP를 업그레이드하고 재미있게 해결하십시오.). 여기에있는 대부분의 날짜 관련 질문은 질 낮은 질의 응답으로 인해 매우 불구가되어 사이트를 검색 할 때 실망하지 마십시오. 그것은 키워드에 대해 거칠지 만, 어떻게 작동하는지 잘 설명하는 보석이 있다는 것은 확실합니다. – hakre

+0

DateTime 객체를 사용하거나 64 비트 버전의 PHP로 업그레이드하여 평균 우주 론자를 만족시켜야하는 전체 날짜 범위를 처리 할 수 ​​있습니다 ... DateTime은 PHP 5.1.x에서도 확장 기능으로 사용할 수 있지만 업그레이드하는 것이 좋습니다. 어쨌든 PHP를 지원되는 버전으로 변환 –

+2

MS Access에서 마이그레이션하기 쉬운 형식으로 날짜를 반환 할 수없는 이유는 무엇입니까? – Gordon

답변

4

해당 날짜를 문자열로 조작하면됩니다.

// "06/12/76 00:00:00" 
list($month, $day, $year) = explode('/', $birth); 
// $year is actually "76 00:00:00"... 
$year = (int)$year; 

$century = 2000; 
if (($century + $year) > date('Y')) 
    $century = 1900; 
$year += $century; 
$mysql = "$year-$month-$day"; // 19760612 will be recognized by MySQL 
+1

에 있습니다. 정확히 "$ year- $ month- $ day"', 또는 "$ year- $ month- $ day 00:00:00 ". 더 읽기 쉽고 정확하게 mysql이 날짜/날짜 시간 필드를 표시하는 방법 – AD7six

+1

당신 말이 맞습니다. 나는 그 해답을 업데이트했다. – LSerni

2

이 맞는 경우 나도 몰라,하지만 당신은 아주 쉽게 문자열 조작으로이 작업을 수행 할 수 있습니다.

먼저 값과 일치하는 문자열을 구문 분석하십시오. 문자열을 파싱하려면 sscanf을 사용할 수 있습니다.

$date = '06/12/76 00:00:00'; 
$result = sscanf(
    $date, '%d/%d/%d %d:%d:%d', 
    $month, $day, $year, $hour, $minute, $second 
); 

그런 다음 연도를 두 글자에서 네 글자로 확장하십시오. 상당히 간단하고 간단해야합니다. if.

$year += $year < 36 ? 2000 : 1900 

그런 다음 문자열을 mysql에 필요한 날짜 형식으로 다시 배열하십시오. 문자열을 연결하려면 sprintf을 사용할 수 있습니다.

$iso = sprintf(
    '%04d-%02d-%02d %02d:%02d:%02d', 
    $year, $month, $day, $hour, $minute, $second 
); 
+0

죄송합니다. 회신하기 전에 바로 "C와 유사합니다"메모를 삭제했습니다. 단지 잡음 이었기 때문에. – AD7six

+0

가끔 의견이 있습니다. 노이즈;) 어쨌든 피드백 덕분에, 나는 조금 대답을 향상. 어떤 관련 코드는 http://stackoverflow.com/a/12663862/367456 – hakre

관련 문제