1 && (($gy%4==0 && $gy%100!=0) || ($gy%400==0))){ /* leap and after Feb */ ++$g_day_no; } $g_day_no += $gd; $j_day_no = $g_day_no-79; $j_np = floor($j_day_no/12053); $j_day_no %= 12053; $jy = 979+33*$j_np+4*floor($j_day_no/1461); $j_day_no %= 1461; if ($j_day_no >= 366) { $jy += floor(($j_day_no-1)/365); $j_day_no = ($j_day_no-1)%365; } $j_all_days = $j_day_no+1; for ($i = 0; $i < 11 && $j_day_no >= $j_days_in_month[$i]; ++$i) { $j_day_no -= $j_days_in_month[$i]; } $jm = $i+1; $jd = $j_day_no+1; return array($jy, $jm, $jd, $j_all_days); } /** * Persian to Gregorian Convertor * * @author farsiweb.info * @access public * @param int year * @param int month * @param int day * @return array converted time */ function p2g($j_y, $j_m, $j_d){ $g_days_in_month = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); $j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29); $jy = $j_y-979; $jm = $j_m-1; $jd = $j_d-1; $j_day_no = 365*$jy + floor($jy/33)*8 + floor(($jy%33+3)/4); for ($i=0; $i < $jm; ++$i){ $j_day_no += $j_days_in_month[$i]; } $j_day_no += $jd; $g_day_no = $j_day_no+79; $gy = 1600 + 400*floor($g_day_no/146097); $g_day_no = $g_day_no % 146097; $leap = true; if ($g_day_no >= 36525){ $g_day_no--; $gy += 100*floor($g_day_no/36524); $g_day_no = $g_day_no % 36524; if ($g_day_no >= 365){ $g_day_no++; }else{ $leap = false; } } $gy += 4*floor($g_day_no/1461); $g_day_no %= 1461; if ($g_day_no >= 366){ $leap = false; $g_day_no--; $gy += floor($g_day_no/365); $g_day_no = $g_day_no % 365; } for ($i = 0; $g_day_no >= $g_days_in_month[$i] + ($i == 1 && $leap); $i++){ $g_day_no -= $g_days_in_month[$i] + ($i == 1 && $leap); } $gm = $i+1; $gd = $g_day_no+1; return array($gy, $gm, $gd); } /** * Format a string according to Persian calendar (UTF) * * @author Omid Mottaghi * @access public * @param string Formatting string * @param int Timestamp to format * @return string Formatted local time/date according to locale settings */ function persian_strftime_utf($format, $timestamp='') { if($timestamp==''){ $timestamp = mktime(); } $g_d=date('j', $timestamp); $g_m=date('n', $timestamp); $g_y=date('Y', $timestamp); list($jy, $jm, $jd, $j_all_days) = g2p($g_y, $g_m, $g_d); $j_month_name = array('', 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'); $j_week_name = array('Saturday' => 'شنبه', 'Sunday' => 'یک شنبه', 'Monday' => 'دوشنبه', 'Tuesday' => 'سه شنبه', 'Wednesday' => 'چهارشنبه', 'Thursday' => 'پنج شنبه', 'Friday' => 'جمعه', 'Sat' => 'ش', 'Sun' => 'ی', 'Mon' => 'د', 'Tue' => 'س', 'Wed' => 'چ', 'Thu' => 'پ', 'Fri' => 'ج'); $j_week_number = array('Sat' => '1', 'Sun' => '2', 'Mon' => '3', 'Tue' => '4', 'Wed' => '5', 'Thu' => '6', 'Fri' => '7'); // calculate string $output_str=''; for ($i=0; $i1 && (($g_y%4==0 && $g_y%100!=0) || ($g_y%400==0))){ $j_days_in_month[12]++; $leap = 1; } $j_month_name = array('', 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند'); $j_week_name = array('Saturday' => 'شنبه', 'Sunday' => 'یک شنبه', 'Monday' => 'دوشنبه', 'Tuesday' => 'سه شنبه', 'Wednesday' => 'چهارشنبه', 'Thursday' => 'پنج شنبه', 'Friday' => 'جمعه', 'Sat' => 'ش', 'Sun' => 'ی', 'Mon' => 'د', 'Tue' => 'س', 'Wed' => 'چ', 'Thu' => 'پ', 'Fri' => 'ج'); $j_week_number = array('Sat' => '1', 'Sun' => '2', 'Mon' => '3', 'Tue' => '4', 'Wed' => '5', 'Thu' => '6', 'Fri' => '7'); // calculate string $output_str=''; for ($i=0; $i 0 * * @author Omid Mottaghi * @access public * @param int hour * @param int minute * @param int second * @param int month * @param int day * @param int year * @param int is daylight savings time set? * @return int returned timestamp */ function persian_mktime($hour='', $min='', $sec='', $mon='', $day='', $year='', $is_dst=-1){ $j_days_in_month = array(31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29); if ( (string) $hour == '') { $hour = persian_date_utf('H'); } if ( (string) $min == '') { $min = persian_date_utf('i'); } if ( (string) $sec == '') { $sec = persian_date_utf('s'); } if ( (string) $day == '') { $day = persian_date_utf('j'); } if ( (string) $mon == '') { $mon = persian_date_utf('n'); } if ( (string) $year == '') { $year = persian_date_utf('Y'); } /* an ugly, beta code snippet to support days <= zero! it should work, but days in one or more months should calculate! */ /* if($day <= 0){ // change sign $day = abs($day); // calculate months and days that shall decrease // this do-while has a lot of errors!!! do{ // $month_days = $j_days_in_month[$mon] $months = floor($day/30); $days = $day % 30; }while(); $mon -= $months; $day -= $days; if ($day < 1) { $mon--; } } */ if ($mon <= 0){ // change sign $mon = abs($mon); // calculate years and months that shall decrease $years = floor($mon/12); $months = $mon % 12; $year -= $years; $mon -= $months; if ($mon < 1) { $year--; $mon += 12; } } if ($day < 1) { $temp_month = $mon-1; $temp_year = $year; if($temp_month <= 0){ $temp_month = 12; $temp_year--; } if ($temp_month>1 && (($temp_year%4==0 && $temp_year%100!=0) || ($temp_year%400==0))){ $j_days_in_month[12] = 30; }else{ $j_days_in_month[12] = 29; } $day += $j_days_in_month[$temp_month]; } list($year, $mon, $day) = p2g($year, $mon, $day); return mktime($hour, $min, $sec, $mon, $day, $year, $is_dst); }