xoogle.ir
پنج شنبه 18 شهریور 1389, 19:43 عصر
سلام دوستان عزیز
امروز داشتم با فایل jdf.php کلنجار میرفتم به طور اتفاقی متوجه شدم که تابع is_kabise یا تابعی که سال کبیسه رو تشخیص میداد به درستی کار نمیکنه.
علاوه بر اون تابع jcheckdate که صحت تاریخ ورودی رو چک میکنه هم ناقص بود.
اول فکر کردم که فایل من مشکل داره و دنبال فایل های دیگه توی گوگل گشتم که 4 5 تا فایل پیدا کردم که همشون همین مشکل رو داشتن.
از اونجایی که چند تا فایل که توی همین انجمن برای دانلود گذاشته شده بودن هم مشکل داشتن شما هم این توابع رو بررسی کنید احتمالا شما هم همین مشکلات رو دارین ...
مشکل اول نتیجه اشتباه تابع is_kabise هست و مشکل دوم ناقص بودن تابع jcheckdate
اینم از تابع ناقص jcheckdate :
function jcheckdate($month,$day,$year)
{
$j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
if($month<=12 && $month>0)
{
if($j_days_in_month[$month-1]>=$day && $day>0)
return 1;
if(is_kabise($year))
echo "Asdsd"; // inja moshkel dare !!!
if(is_kabise($year) && $j_days_in_month[$month-1]==31)
return 1;
}
return 0;
}
علاوه بر ناقص بودن ، این تابع نتیجه اشتباه هم برمیگردونه.
من این 2 تا تابع رو از فایل pdate.php که اونم توابعی برای کار با تاریخ شمسی داره برداشتم و یه مقداری هم ویرایشش کردم تا الان که داره درست کار میکنه.
براتون میذارم اگر شما هم دوست داشتید فایل هاتون رو اصلاح کنید.
function isKabise($year)
{
$mod = $year%33;
if($mod==1 or $mod==5 or $mod==9 or $mod==13 or $mod==17 or $mod==22 or $mod==26 or $mod==30) return true;
return false;
}
function jcheckdate($month, $day, $year)
{
$MonthDays = array(0,31,31,31,31,31,31,30,30,30,30,30,29);
if($month<1 || $month>12 || $year<1 || $year>32767 || $day<1 || $day>31){
return false;
}
if($day>$MonthDays[$month]){
if($month!=12){
return false;
}elseif($month==12 and $day>30){
return false;
}elseif($month==12 and $day==30 and !isKabise($year)){
return false;
}
}
return true;
}
فایل اصلاح شده jdf رو هم در انتها ضمیمه میکنم
امروز داشتم با فایل jdf.php کلنجار میرفتم به طور اتفاقی متوجه شدم که تابع is_kabise یا تابعی که سال کبیسه رو تشخیص میداد به درستی کار نمیکنه.
علاوه بر اون تابع jcheckdate که صحت تاریخ ورودی رو چک میکنه هم ناقص بود.
اول فکر کردم که فایل من مشکل داره و دنبال فایل های دیگه توی گوگل گشتم که 4 5 تا فایل پیدا کردم که همشون همین مشکل رو داشتن.
از اونجایی که چند تا فایل که توی همین انجمن برای دانلود گذاشته شده بودن هم مشکل داشتن شما هم این توابع رو بررسی کنید احتمالا شما هم همین مشکلات رو دارین ...
مشکل اول نتیجه اشتباه تابع is_kabise هست و مشکل دوم ناقص بودن تابع jcheckdate
اینم از تابع ناقص jcheckdate :
function jcheckdate($month,$day,$year)
{
$j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29);
if($month<=12 && $month>0)
{
if($j_days_in_month[$month-1]>=$day && $day>0)
return 1;
if(is_kabise($year))
echo "Asdsd"; // inja moshkel dare !!!
if(is_kabise($year) && $j_days_in_month[$month-1]==31)
return 1;
}
return 0;
}
علاوه بر ناقص بودن ، این تابع نتیجه اشتباه هم برمیگردونه.
من این 2 تا تابع رو از فایل pdate.php که اونم توابعی برای کار با تاریخ شمسی داره برداشتم و یه مقداری هم ویرایشش کردم تا الان که داره درست کار میکنه.
براتون میذارم اگر شما هم دوست داشتید فایل هاتون رو اصلاح کنید.
function isKabise($year)
{
$mod = $year%33;
if($mod==1 or $mod==5 or $mod==9 or $mod==13 or $mod==17 or $mod==22 or $mod==26 or $mod==30) return true;
return false;
}
function jcheckdate($month, $day, $year)
{
$MonthDays = array(0,31,31,31,31,31,31,30,30,30,30,30,29);
if($month<1 || $month>12 || $year<1 || $year>32767 || $day<1 || $day>31){
return false;
}
if($day>$MonthDays[$month]){
if($month!=12){
return false;
}elseif($month==12 and $day>30){
return false;
}elseif($month==12 and $day==30 and !isKabise($year)){
return false;
}
}
return true;
}
فایل اصلاح شده jdf رو هم در انتها ضمیمه میکنم