2016-12-04 118 views
0

請考慮以下情形 - 我有一臺PHP服務器接收傳入的Ajax請求,以通過匹配搜索查詢的1個或多個字段檢索記錄。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其中custom_field存儲在數據庫中的日期字段,但PHP服務器不知道它是哪種字段類型(技術上我可以檢索此信息,但現在試圖避免它)。

我希望能夠運行數據庫查詢,但不明確知道custom_field是否爲日期字段,並且仍支持不同的格式。

理想情況下,我可以根據客戶端格式更改數據庫使用的格式來比較日期,即我可以告訴MySQL如果查詢包含日期字段,則使用給定的格式。或者在表/數據庫模式中全局更改它。

我的選擇是遍歷請求並將每個日期字段從客戶端格式轉換爲MySQL格式或使用正則表達式來轉換查詢日期。但是,如果可能的話,我寧願在數據庫級別解決它。

+0

您應該修復API,以便所有日期均以ISO 8601標準格式(如YYYY-MM-DD)傳遞。 –

+0

@GordonLinoff謝謝,那是我害怕我必須要做的。在數據庫級別沒有辦法做到這一點嗎? – Yani

+0

就我個人而言,我會使用Unix時間戳。更快的查詢和更容易操作的前端。 – Brian

回答

0

您可以存儲您的用戶在標準時區提交的日期,然後計算回您希望顯示在您的php代碼中的時區。

+0

時區在這裏不是問題。問題是日期格式本身。 – Yani