2014-10-22 45 views
1

我一直在PHP做這個比較MySQL的日期:在PHP中比較MySQL日期字符串格式是否正確?

<?php 

strtotime('2007-12-12 10:00:01') > strtotime('2007-12-12 10:00:00') 

我剛剛發現,如果比較在PHP直接2個日期(格式Y-m-d H:i:s),這個結果似乎是確定。我搜了google for this,沒有找到結果。

實施例1:

<?php 

var_dump('2006-12-12 10:00:00' > '2006-12-12 10:00:00'); 
var_dump('2006-12-12 10:00:00' >= '2006-12-12 10:00:00'); 
var_dump('2006-12-12 10:00:00' <= '2006-12-12 10:00:00'); 
var_dump('2006-12-12 10:00:00' < '2006-12-12 10:00:00'); 

結果1:

bool(false) 
bool(true) 
bool(true) 
bool(false) 

實施例2:

<?php 

var_dump('2007-12-12 10:00:00' > '2006-12-12 10:00:01'); 
var_dump('2007-12-12 10:00:00' >= '2006-12-12 10:00:01'); 
var_dump('2007-12-12 10:00:00' <= '2006-12-12 10:00:01'); 
var_dump('2007-12-12 10:00:00' < '2006-12-12 10:00:01'); 

結果2:

bool(true) 
bool(true) 
bool(false) 
bool(false) 

看來,PHP是正確比較兩種MySQL日期。 這是a在php中比較mysql日期的正確方法嗎?

+0

您正在比較字符串,而不是時間戳。 「時間戳字符串」按字符串正確排序更爲巧合。 – 2014-10-22 08:42:24

+0

或者將它們轉換爲秒或者使用DateTime類 – Ghost 2014-10-22 08:44:49

+1

[表示法的字典順序...對應於時間順序](http://en.wikipedia.org/wiki/ISO_8601#General_principles) – georg 2014-10-22 08:56:26

回答

4

'2007-12-12 10:00:00' > '2006-12-12 10:00:01'比較兩個字符串詞彙。這個偶然恰好工作,如果兩個字符串具有相同的格式(即數字和連字符或冒號在完全相同的景點),並且元素的順序是最重要的最不重要的(即年,月,日,小時,分鐘,秒)。

因此,jein。這並不是不正確的,因爲它確實有效,但是確實起作用的事實或多或少是偶然的。它看起來像是一個脆弱的解決方案,可能很容易中斷,而使用strtotime明確解析日期並比較明確的時間戳值是脆弱得多。 (請注意,strtotime也取決於字符串是某種已知格式,但它不會神奇地爲您解析任何和所有值。)

+0

有沒有人請指點我到PHP手冊中的位置,這是記錄在案? – Niko 2014-10-22 08:49:59

+0

@Niko這個? http://php.net/manual/en/language.operators.comparison.php – deceze 2014-10-22 08:54:08

+0

啊,謝謝!我只是在看該頁面的翻譯版本,這似乎錯過了很多。 – Niko 2014-10-22 08:59:42