2016-12-04 4 views
0

다음 시나리오를 고려하십시오. - 검색 쿼리와 일치하는 하나 이상의 필드로 레코드를 검색하기 위해 들어오는 Ajax 요청을 수신하는 PHP 서버가 있습니다.MySQL - 가변 날짜 형식 및 사용자 정의 필드가있는 날짜 별 쿼리

이 시스템은 서로 다른 서버에 배포되며, 다음과 같은 서로 다른 날짜 형식을 가질 수

클라이언트 1 (유럽) - 날짜 형식 22-02-2016 (DD-MM-YYYY)가

클라이언트 2 (미국) - 날짜 형식 02-22-2016 (mm-dd-yyyy)

* 각 클라이언트는 관리자 패널에서 자신의 사용자 정의 날짜 & 시간 형식을 설정할 수 있습니다.

그래서 쿼리가있을 수 있습니다 중 하나

{"first_name": "john","order_date":"22-02-2016"} 

또는

{"first_name": "john","order_date":"02-22-2016"} 

또는 음모가 두껍게 곳도

다음
{"first_name": "john","order_date":"2016-02-22"} 

인 - 시스템도 지원하는 사용자 정의 필드 따라서 검색어는 다음과 같을 수도 있습니다.

{"first_name": "john","custom_field":"22-02-2016"} 

여기서 custom_field은 데이터베이스에 DATE 필드로 저장되지만 PHP 서버는 필드 유형을 알지 못합니다 (기술적으로이 정보를 검색 할 수는 있지만 지금은 피하기 위해 노력하고 있습니다).

custom_field이 날짜 필드인지 여부를 명시 적으로 알지 못하고 데이터베이스 쿼리를 실행할 수 있고 여전히 다른 형식을 지원할 수 있기를 원합니다.

이상적으로는 클라이언트 형식에 따라 날짜를 비교하기 위해 데이터베이스에서 사용하는 형식을 변경할 수 있습니다. 즉, 쿼리에 날짜 필드가 포함되어 있으면 주어진 형식을 사용한다는 것을 MySQL에 알릴 수 있습니다. 또는 테이블/데이터베이스 스키마에서 전역으로 변경하십시오.

내 대안은 요청을 반복하고 클라이언트 형식의 각 날짜 필드를 MySQL 형식으로 변환하거나 정규식을 사용하여 쿼리 날짜를 변환하는 것입니다. 그러나 가능하다면 데이터베이스 레벨에서 오히려이를 해결할 것입니다.

+0

모든 날짜가 YYYY-MM-DD와 같은 ISO 8601 표준 형식으로 전달되도록 API를 수정해야합니다. –

+0

@GordonLinoff 덕분에, 내가 뭘해야할지 걱정했다. 데이터베이스 수준에서이 작업을 수행 할 수있는 방법이 있습니까? – Yani

+0

개인적으로 유닉스 타임 스탬프를 가지고 갈 것입니다. 빠른 쿼리와 프론트 엔드에서의 조작이 더 쉽습니다. – Brian

답변

0

사용자가 표준 시간대에 제출 한 날짜를 저장 한 다음 PHP 코드에 표시 할 시간대로 다시 계산할 수 있습니다.

+0

시간대는 여기에서 문제가되지 않습니다. 문제는 날짜 형식 자체입니다. – Yani