[精讚] [會員登入]
1942

使用strcmp來判斷日期是否介於某日期之間

要比較現在日期是否在兩個日期之間,使用字串比對的方法

分享此文連結 //n.sfs.tw/12990

分享連結 使用strcmp來判斷日期是否介於某日期之間@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2019-10-25 11:42:07 最後編修
2019-01-03 16:36:53 By 張○○
 

自動目錄

php 要比較某日期是否在兩個日期之間不使用DATETIME class(php >5.3)、也不轉換timestamp,如果日期字串都要相同格式的話可用字串比對。

  strcmp(字串1, 字串2)

  strcmp("2019-01-01", "2019-01-03")=-2  第一個字串小傳回負值

  strcmp("2019-02-05", "2019-01-01")=10  第一個字串大傳回正值

  strcmp("2019-01-05", "2019-01-05")=0   日期相同傳回0

所以只要符合,要比對的日期大於等於開始日期,小於等於結束日期即可知道介於開始結束日期之間

$begin="2018-12-21";
$end= "2019-02-01";
$curr= date("Y-m-d");  // 假設取得今天日期 2019-01-03

if( strcmp($curr, $begin) >=0 && strcmp($curr, $end) <=0 )
  print "日期{$curr}介於開始日期{$begin}和結束日期{$end}之間";

 

strcmp的漏洞

strcmp的函式比較兩個字串結果正確,但是如果參數代入的不是「字串」而是其他類型,出來的結果會無法預期產生漏洞。

因此使用 strcmp來比對,一定要確定參數一定要是「字串」

if(gettype($value) != "string"){ die "日期格式不正確"; }

再使用正規表達式來確定格式正確

if( !preg_match('/\d{4}-\d{2}-\d{2}/', $curr)){ die "日期格式不正確"; }

 

結論

用strcmp是比較懶的作法,但加上格式的檢查,感覺好像更麻煩。

所以適用於不需要格式檢查的判斷,例如資料庫取回的日期欄位。

還是用 strtotime來作轉換比較正確。

$begin="2018-12-21";
$end= "2019-02-01";
$curr= date("Y-m-d");  // 假設取得今天日期 2019-01-03
$begint =strtotime($begin);
$endt= strtotime($end)+86400;
$currt= strtotime($curr);
if( $currt>= $begint && $currt <= $endt )
  print "日期{$curr}介於開始日期{$begin}和結束日期{$end}之間";

要注意的是結束日期要加上86400秒,否則會以當天的一開始作結束。

 

 


重寫自原文 2010-01-08 00:27:48

END

你可能感興趣的文章

[CI3] 使用和修改日曆類別 calendar library CI3有一個日曆圖書館 library,可以快速的建立一個日曆,但是想修改讓他更棒

[phpmyadmin] 錯誤:您應升級到 MySQL 5.5.0 或更新版本 使用phpmyadmin4出現錯誤:您應升級到 MySQL 5.5.0 或更新版本的解決方式

[PHP] 字串編碼及解碼函式 為何要將字串編碼?理由很簡單,就是不要讓人家輕易的知道字串內容是什麼。例如點選分頁時,我們常會用這樣的連結: index

[PHP] 檢查IP是否在某個網段內 mtachcidr 要檢查IP是否在某個網段內,要寫幾行?10行?5行? 不用,只要2行。以下是我寫的 code /** * matchCI

[phpmyadmin] 缺少 mcrypt 外掛,請檢查 PHP 設定 缺少 mcrypt 外掛,請檢查 PHP 設定,安裝php-mcrypt。

[PHP] 字串拆解函數substr 奇異的錯誤(札記) 偶然發現一個 substr函數拆解上的怪異之處

隨機好文

談借錢 人借錢時手心向上頭向下,人還錢時手心向下頭向上

UTF-8 BOM (Byte Order Mark) 的問題 在 Michael Kaplan 那看到 Every character has a story #4: U+feff

PHP for sphinx 函式庫安裝 PECL/sphinx PHP>= 5.2.2 已經能原生支援 sphinx,可是預設的沒有裝,我們得自己裝才能用

[bc] linux 的計算機 bc 設定小數位數、計算π、次方根 linux 的計算機 bc 設定小數位數、計算π、次方根

[Win7] 燒錄 iso 檔 在Windows7 中內建燒錄程式,可以直接把檔案拉到光碟機裡,再執行燒錄。