چک کردن صحت تاریخ

چک کردن صحت تاریخ

سلام.خیلی وقت ها پیش میاد که از کاربر تاریخ دریافت میکنیم. مثلا تاریخ تولد یا هر تاریخ دیگه ای که مد نظر دارید. اما لازمه که یه بررسی سطحی بشه که آیا این یه تاریخ استاندارد و درست هست یا نه و اگه نبود اخطار بدیم. امروز قصد دارم تابع checkdate را به شما معرفی کنم. این تابع 3 ورودی دریافت میکنه و بصورت زیر تعریف می شود:

checkdate(month, day, year);

 همونطور که مشخصه ابتدا عدد ماه سپس روز و بعد از اون سال را وارد میکنید و تابع در صورت معتبر بودن تاریخ مقدار true در غیر اینصورت مقدار false را بر میگرداند. به مثال زیر توجه کنید همه چیزو متوجه میشید:

<?php
var_dump(checkdate(12, 31, -400));
echo "<br>";
var_dump(checkdate(2, 29, 2003));
echo "<br>";
var_dump(checkdate(2, 29, 2004));
?>

 اما خب تا اینجا همه چی خوبه اما این تابع از تاریخ شمسی پشتیبانی نمیکنه. پس خودم یه تابع با رویکردی متفاوت براتون نوشتم که تاریخ شمسی و جلالی هم پشتیبانی کنه. تابع بصورت زیر هست:

function checkdatejalali($date){
	// Snippets.ir
	$ndate  = explode('/', $date);
	if(count($ndate) == 3){
		if(strlen($ndate[0]) == 2 || strlen($ndate[0]) == 4){
			if((strlen($ndate[1]) == 2 || strlen($ndate[1]) == 1) && $ndate[1] >= 1 && $ndate[1] <= 12){
				if((strlen($ndate[2]) == 2 || strlen($ndate[2]) == 1) && $ndate[2] >= 1 && $ndate[2] <= 31){
					return true;
				}
				else	
					return false;
			}
			else	
				return false;
		}
		else
			return false;
	}
	else
		return false;
}

یا بصورت ساده تر و فشرده تر:

function checkdatejalali($date){
	// Snippets.ir
	$ndate  = explode('/', $date);
	return count($ndate) == 3 && (strlen($ndate[0]) == 2 || strlen($ndate[0]) == 4) && ((strlen($ndate[1]) == 2 || strlen($ndate[1]) == 1) && $ndate[1] >= 1 && $ndate[1] <= 12) && ((strlen($ndate[2]) == 2 || strlen($ndate[2]) == 1) && $ndate[2] >= 1 && $ndate[2] <= 31);
}

تابع بالا تاریخ را بصورت رشته دریافت می کنه و نیازی نیست که شما تاریخ را جدا سازی کنید، خودش این کار را انجام می دهد. تقریبا تمام حالت های تاریخ فارسی را در نظر گرفته است. با این حال اگر کاربران عزیز مشکلی در تابع مشاهده کردند اطلاع بدند تا تصحیح شود. قبل از اینکه از حضورتون مرخص بشم به مثال های زیر توجه کنید:

var_dump(checkdatejalali("1393/1/31"));
var_dump(checkdatejalali("1393/12/54"));
var_dump(checkdatejalali("1393/13/31"));
var_dump(checkdatejalali("1393/12/1"));
var_dump(checkdatejalali("93/12/01"));

و خروجی اون بصورت زیر هست :

bool(true)
bool(false)
bool(false)
bool(true)
bool(true)

امیدوارم کاربردی بوده باشه و استفاده ببرید . ما را از دیدگاه های گرمتان محروم نکنید!

5 thoughts on “چک کردن صحت تاریخ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.