[精讚] [會員登入]
1841

使用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

你可能感興趣的文章

[PHP>7.3] switch中的 Did you mean to use "continue 2"? 除錯 這近更新 PHP到7.3版以後,出現這樣的錯:targeting switch is equivalent to "break". Did you mean to use "continue 2"?解決方法

[PHP] 類別中要怎麼使用callback function 召回函數(回呼函數)? 在類別中使用標準函數,若其中的callback 函數也是在類別中,該怎麼使用?

PHP 數字加解密函式 自寫的數字加解密,勉強用

[PHP7] 利用Memcached 儲存 Session Memcached+ PHP7,利用Memcached 儲存 Session。

作業上傳程式 提供學生作業上傳的程式

[PHP] 台灣身分證號及檢查程式 台灣身分證號及PHP檢查程式

隨機好文

[Windows7] 移除IE10及移除IE11 Windows7 不得已的情況要移除IE11或IE10怎麼做?

Linux shell 的date表示法 linux下SHELL中的date表示法

TFTP Server 安裝及使用 讓設備的網路設定檔或是韌體經由TFTP拷備出來,操作的方法

一個邏輯的錯誤刪了全部檔案的經驗 今天本來想做一件很簡單的事,但卻足足浪費我多一倍的時間,再加上刪掉我全部的檔案,原因只是因為我自己的邏輯錯誤。

NETCRAFT發現你的網站及作業系統 NETCRAFT可以發現你的網站及作業系統