첫째 : 결코 적EVER 저장 날짜 또는 날짜 시간 문자열로 데이터베이스있다.
절대 안됩니다.
알았습니까?
데이터베이스의 기본 제공 date
또는 datetime
데이터 유형으로 변환해야합니다.
이 작업을 수행하지 않으면 나중에 매우 어려운 결과를 초래할 수 있습니다. 예를 들어, 문자열을 다양한 형식으로 저장하는 경우 날짜순으로 정렬하도록 데이터베이스를 가져 오려고합니다. 그리고 당신이 확신 할 수있는 한 가지가있는 경우, 데이터베이스에 날짜가있을 때, 주어진 날짜 이전, 이후 또는 이전 항목을 기준으로 쿼리해야합니다. 당신이 그들과 함께 그런 종류의 일을 할 필요가 없다면, 첫 번째 장소에 날짜를 저장하는 것이 많지 않을 것입니다. 그래서 당신이 아직 그것을하도록 요청받지 않았다면, 그것을 주어진 것으로 생각하십시오 나중에 요청할 것입니다. 따라서 항상 항상은 varchar가 아닌 올바른 데이터 형식으로 항상 저장합니다.
다음으로 처리해야하는 형식의 혼합.
이것은 정신 이상입니다.
나는 PHP의 strtotime()
기능을 싫어하고 싫어한다. 그것은 느리고, 불행한 불만을 가지고 있으며, 일반적으로 과거의 유산으로 간주되고 사용되지 않아야합니다. 그러나,이 경우, 그것은 단지 당신의 구조에 올 수 있습니다.
strtotime()
은 알 수없는 형식으로 날짜 문자열을 수락하고 구문 분석 한 다음 정확한 시간 소인을 출력하도록 설계되었습니다. 분명히 dd-mm-yyyy
과 mm-dd-yyyy
형식의 존재를 처리해야합니다. 구분 기호를 보면서 당신이 의미 한 두 가지를 추측하여이 작업을 수행합니다.
구분 기호로 슬래시를 사용하는 경우 형식은 mm/dd/yyyy
으로 가정합니다. 대시를 사용하는 경우 dd-mm-yyyy
으로 가정합니다.이것은 평범한 사용법에서 strtotime()
같은 고통을 사용하는 작은 단점 중 하나입니다. 하지만 여기가 네 친구 야.
실제로 작동하는 방식은 실제로 질문에서 지정한 형식과 정반대입니다. 그러나 그것은 당신을 도울 정도로 충분해야합니다. 입력 문자열에서 슬래시와 대시를 전환하고 결과를 strtotime()
으로 전달하면 질문에 설명 된대로 모든 경우에 올바른 타임 스탬프가 생성됩니다.
그러면 데이터베이스에 올바르게 저장할 수 있어야합니다.
그러나이 테스트를 매우 철저히 권장합니다. 그리고 그것이 어딘가에 줄을 따라 부서지면 놀라지 않을 것입니다. 일치하지 않는 형식으로 데이터가 공급된다면 일관성없는 일관성을 보장 할 방법이 없습니다. 프로그램은 기본적으로 나쁜 데이터로 최선을 다해야합니다.
또한 입력 데이터의 품질에 관해 몇 가지 중요한 질문을 제기해야합니다. 이 상황에서 프로그램을 안정적으로 사용할 수는 없습니다. 그것을 공급하고있는 사람에게 그것이 충분히 좋지 않다는 것을 분명히하십시오. 프로그램이 불량 데이터로 인해 고장 나면, 귀하의 잘못이 아니라 귀하의 잘못입니다.
타임 스탬프로 저장할 수 있습니다. 'strtotime()'을 사용하여 데이터베이스에 int (10)로 저장하십시오. –
'datetime'! ='varchar' –
'datetime'을 사용할 지 또는'datetime'을 사용할지를 결정하기 전에 [이 기사를 읽으십시오 (http://stackoverflow.com/questions/409286/datetime-vs-timestamp) int'. – Kermit