PHP 關於判斷輸入日期是否合法


合法要求

  • 一年僅十二個月
  • 4,6,9,11月僅30天,1,3,5,7,8,10,12月僅31天
  • 閏年2月29天,否則28天
  • 輸入的變量年,月,日為數字

代碼:

<?php
//PHP中判斷輸入的字符串是否是合法日期
function checkdate($data){
$date=strtotime($data);
if($data==(date("Y-m-d", $date))|| $data==(date("Y-m-j", $date))||$data==(date("Y-n-d", $date))||$data==(date("Y-n-j", $date)))
echo "合法<br>";
else
echo "非法<br>";
}
//實例
checkdate("2008-");//輸出“非法”
checkdate("a-b-c");//輸出“非法”
checkdate("2009-2-29");//輸出“非法”
checkdate("2009-03-31");//輸出“非法”
checkdate("2008-01-10");//輸出“合法”
checkdate("2008-2-29");//輸出“合法”
?>

碎碎念與筆記

當我在寫這一段碎碎念的時候其實我是想舉例參考其他代碼時無法實現的部分錯誤性,可是重新驗證大概只是我當時又在哪個地方打錯了什么字符,內心十分復雜。
大概思路就是將輸入的字符串轉換為時間戳的形式,再轉換為字符串性可自定義的日期形式與原字符串進行一個比較。
strtotime()函數限定了一年僅12月,1個月最多只有31天否則返回false。但像4月31日這樣的輸入同樣存在時間戳,進一步用date()函數將其轉化為日期格式時輸出的是5月1日,因此與原字符串進行比對是判斷日期是否合法的關鍵方法。

var_dump(date("Y-m-d",$time = strtotime("2018-4-31")));
//輸出string '2018-05-01' (length=10)

大部分參考代碼在$data==(date("Y-m-d", $date))就差不多到此為止了,因此在輸入"2018-2-1"這樣的數據時大概會判斷錯誤。因為被比較的字符串為“2018-2-1”,與之比較的字符串在經過date()函數轉化后為“2018-02-01”("Y-m-d"自動補0)

var_dump(date("Y-m-d",$time = strtotime("2018-2-1")));
//輸出string '2018-02-01' (length=10)

感覺可能還是有一點簡化的空間,如果以后想出來再修改這一篇博客吧。✧。(ˊᗜˋ)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM