2016-12-04 9 views
0

次のシナリオを考えてみましょう。 - 検索クエリと一致する1つ以上のフィールドでレコードを取得する着信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形式に変換するか、または正規表現を使用してクエリ日付を変換します。しかし、可能であればデータベースレベルでそれをむしろ解決する方がはるかです。

+0

すべての日付にISO 8601標準形式(YYYY-MM-DDなど)が渡されるようにAPIを修正する必要があります。 –

+0

@ GordonLinoffありがとう、私は何を恐れていたのだろうか。これをデータベースレベルで行う方法はありませんか? – Yani

+0

個人的に私はUnixのタイムスタンプに行きます。より迅速なクエリと、フロントエンドでの操作が簡単です。 – Brian

答えて

0

ユーザが標準時間帯に提出した日付を保存し、PHPコードで表示する時間帯に戻すことができます。

+0

タイムゾーンはここで問題ではありません。問題は日付形式そのものです。 – Yani

関連する問題