[精讚] [會員登入]
2114

使用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 木馬作為駭客攻擊的手法 利用 php 木馬作為駭客攻擊的手法

[PHP] 隨機產生一個顏色字串 讓PHP 隨機產生一個顏色字串

[PHP+ci4] codeignitor4 Cache 及 Session 使用 memcached php 的framework codeignitor4 中的cache和session使用memcached

PHP 產生連續的日期 要用PHP產生連續的日期,連續月份

[PHP] 將字串的部分加上遮罩的函式 有些資料會想要隱藏部分的字元,例如身分證號或信用卡號、電話等。我寫了一個函式來完成這個功能。

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

隨機好文

UTF8中文字/全形一覽 快速查詢urf-8的中文字,共計13246中文字(5401常用字+7652罕用字+日文或編號),292全形符號,27半形符號。

看懂DSUB DVI HDMI USB等各式影音接頭 看懂DSUB DVI HDMI等各式影音接頭

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

[JAVA] JWS, JWT, JWE, JOSE是什麼? [JAVA] JWS, JWT, JWE, JOSE是什麼?非常的複雜,儘量來搞清楚..

正則表達式:Email名稱防止連續輸入點(.)及下底線(_) Email的名稱中要允許特殊符號,但又不允許連續出現的正則表達式