2013-09-06 3 views
1

나는 웹을 가지고 있기 때문에 사용자는 날짜를 입력해야만 MySQL 데이터베이스에 저장됩니다. 사용자가 m/d/yyyy의 날짜를 입력하게하고 시스템이 MySQL이 요구하는 Y-m-d 형식으로 변환하도록합니다.PHP에서 날짜 형식 변환

$date = new DateTime($this->vital_date); 
$this->vital_date = $date->format('Y-m-d'); 

사용자가 2013년 9월 6일 2013 입력하면 :

나는 다음 시도했다, 나는 그것이 아주 간단하다고 생각하지만, 나는 그것이 심각한 오류를 생산을 중단 얻을 수 없습니다 -06-09는 MySQL 테이블에 저장됩니다. (달과 날짜의 전위를 참고

을 그럼, 이전, 사전 객체 방법 시도 :..

$date = strtotime($this->vital_date); 
$this->vital_date = date('Y-m-d', $date); 

을 그리고 그 같은 일 한 - 전치 달과 날짜를

사람은 나에게 내가 잘못을 뭘하는지에 어떤 도움을 줄 수 아니면 더 나은 변환을 만들 수있는 방법에 대해 설명합니다.

+2

vsprintf [날짜 시간 :: createFromFormat()] (http://www.php.net/manual/en/datetime.createfromformat.php) 날짜 문자열의 형식을 지정하는 방법 –

+0

아마 괜찮은데 mysql이 잘못된 (유럽어) 형식을 사용하고 있을까요? 날짜를 저장하고 다시 검색하려고 했습니까? – cerkiewny

답변

3

Y OU는 m에서 PHP의 DOC에서

날짜 DateTime::createFromFormat

를 사용해야/D/Y 또는 DMY 형식은 다양한 구성 요소들 사이의 분리를보고 명확화되어 세퍼레이터 슬래시 경우 (/) , 미국의 m/d/y가 가정된다. 구분 기호가 대시 (-) 또는 점 (.) 인 경우 유럽 d-m-y 형식이 사용됩니다.

그것은 ISO 8601 (YYYY-MM-DD) 날짜 또는 날짜 시간 :: createFromFormat() 수를 사용하는 것이 가장 좋습니다, 잠재적 모호성을 방지하기 위해.

$vital_date = "9/6/2013"; 
$date = DateTime::createFromFormat("m/d/Y", $vital_date); 
echo $date->format('Y-m-d'); 
+0

달에는'n'을 사용하고 낮에는'j'를 사용해야합니다.그렇지 않으면 형식의 맨 앞에 0이 나타날 것으로 예상됩니다. – Fluffeh

+0

이것도 실제로 작동합니다. 조금 느려질 것입니다. –

+0

귀하의 평가에 문제가 보이지 않습니다. 'j'와'n'을 서로 바꿔야하므로 형식이 동일합니다 :) –

1

당신은 다음과 같은 방법으로 데이터를 제공하는 형식을 지정할 수 있습니다

$date = DateTime::createFromFormat('j/n/Y', '9/6/2013'); 
0

이 샘플이 상황에 딱 명확하지 않다 그러나 그것은이다 심지어 많은 다른 장소에서 유용합니다. 예를 들어 수학자의 정보를 얻는 것은 정규식없이 사이트 텍스트 상자에 2 차 방정식을 입력했습니다

또는 운전 면허 번호는 scanf (예 : scanf($input, '%s-%s-%d/%d))을 사용하여 데이터베이스 형식으로 올바르게 처리하고 저장할 수 있습니다. 등

당신이 알고 그래서 그것은 당신의 필요에 따라

에 대한 sscanf, scanf, printf, sprintf, 정적 메소드를 사용하여 직선 날짜 시간을 사용하는 대신

<?php 
$date = '9/6/2013'; 

    list($month,$day,$year) = sscanf($date, '%d/%d/%d'); 

    $date = sprintf('%d-%02d-%02d',$year,$month,$day); 

echo $date; 
?>