اعتبار سنجی تاریخ در بازه زمانی مشخص با php

اعتبار سنجی تاریخ در بازه زمانی مشخص با php

اعتبار سنجی تاریخ با php – در این آموزش قصد داریم یاد بگیریم که چطوری تاریخی که از کاربر دریافت می کنیم رو اعتبار سنجی کنیم که آیا معتبر هست یا نه ( البته در برای تاریخ میلادی خیلی ساده تر هست اما برای تاریخ جلالی فرق می کند )




سورس کد

نیازمند کتابخانه Jdf هست که در پایین لینک دانلود قرار داده شده است .

<?php

function loadJDF()
{
    if (!function_exists('jmktime')) require_once "jdf.php";
}


function timestampToFaDate($timestamp, $format = "Y-m-d H:i:s", $digits = "en", $none = '', $timezone = 'Asia/Tehran')
{
    loadJDF();

    return jdate($format, $timestamp, $none, $timezone, $digits);
}


function validateByPersianDateInCustomRange($value)
{
    
    $result = false;

    if (!$value || !is_string($value)) return $result;

    $date_parts = explode("/", $value);

    if (count($date_parts) != 3) return $result;

    foreach($date_parts as &$date_part){
        if(!is_numeric($date_part)) return $result;

        $date_part = intval($date_part);
    }

    $unix = time();

    // check year
    $currentYear = intval(timestampToFaDate($unix , "Y"));
    if (!(1300 <= $date_parts[0] && $date_parts[0] <= $currentYear)) return $result;

    // check month
    $currentMonth = intval(timestampToFaDate($unix , "m"));
    if (!(1 <= $date_parts[1] && $date_parts[1] <= 12)) return $result;

    if ($date_parts[0] == $currentYear) {
        if (!(1 <= $date_parts[1] && $date_parts[1] <= $currentMonth)) return $result;
    }

    // check day
    $currentDay = intval(timestampToFaDate($unix , "d"));
    if (!(1 <= $date_parts[2] && $date_parts[2] <= 31)) return $result;

    if ($date_parts[0] == $currentYear && $date_parts[1] == $currentMonth) {
        if (!(1 <= $date_parts[2] && $date_parts[2] <= $currentDay)) return $result;
    }

    $result = true;

    return $result;
}

// تاریخی که دارم اسکریپت رو چک می کنم 1402/6/1

var_dump(validateByPersianDateInCustomRange("1396/6/6")); // true

var_dump(validateByPersianDateInCustomRange("1402/6/1")); // true

var_dump(validateByPersianDateInCustomRange("1402/6/2")); // false

?>


دانلود سورس کد

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

contact us