2014年6月29日

php 日期比較

在看 code 的時候第一次看到有人使用下列的判斷式來判斷時間是否在區間內
<?php
if (date("Y-m-d H:i:s") >= "2014-06-29 00:00:00" 
    && date("Y-m-d H:i:s") <= "2014-06-29 23:59:59") {
    // 在活動時間內 做某些事
}

1. 兩個判斷式需要與現在時間進行判斷,卻呼叫兩次相同的 date function,有可能造成效能上的耗損,類似的情況如下面程式碼,每次迴圈執行 count 都會被執行,這個例子是在 $arr 不會因為迴圈而使得大小變動,那麼就不應該每次都執行。
<?php
$arr = rang(1,10000);
// bad
for ($i=0;$i<count($arr);$i++) {
    // do something
}
 
// good
$arrLength = count($arr);
for ($i=0;$i<$arrLength;$i++) {
    // do something
}
2. 雖然說在此,透過相同的時間字串格式進行字串比對達到判斷現在時間是否為活動進行時間是正確的,但是因為數字比對比字串比對來得更有效率,一般是將時間轉換成時間戳記後進行比較。

3. 在字串比較上,是一個一個字元進行比較,因為兩者的時間字串格式相同,加上數字在 ASCII 上的順序剛好等於數字大小順序。

4. 想要找出西元99年來讓此判斷失誤,查閱文件後發現 date 是有範圍限制的。

date function doc
http://php.net/manual/zh/function.date.php

沒有留言:

張貼留言