]> git.mjollnir.org Git - s9y.git/commitdiff
some bugs fixed and some optimization done in Jalali calendar functions.
authoromidmottaghi <omidmottaghi>
Fri, 30 Sep 2005 16:43:51 +0000 (16:43 +0000)
committeromidmottaghi <omidmottaghi>
Fri, 30 Sep 2005 16:43:51 +0000 (16:43 +0000)
include/functions_calendars.inc.php

index 96b012d9e49d8d54aa4279093fb1988f99a1882f..906e0e6307940b40ad9034b4e8bd434004ef343d 100644 (file)
@@ -42,7 +42,7 @@ function g2j($g_y, $g_m, $g_d){
     $jm = $i+1;
     $jd = $j_day_no+1;
     
-    return array($jy, $jm, $jd);
+    return array($jy, $jm, $jd, $j_all_days);
 }
 
 // Gregorian to Jalali Convertor, by farsiweb.info
@@ -95,7 +95,7 @@ function calendar_jalali_utf($format, $timestamp) {
     $g_m=date('n', $timestamp);
     $g_y=date('Y', $timestamp);
 
-    list($jy, $jm, $jd) = g2j($g_y, $g_m, $g_d);
+    list($jy, $jm, $jd, $j_all_days) = g2j($g_y, $g_m, $g_d);
 
     $j_month_name = array('', 'فروردین', 'اردیبهشت', 'خرداد', 'تیر',
             'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند');
@@ -122,99 +122,103 @@ function calendar_jalali_utf($format, $timestamp) {
                            'Fri' => '7');
     
     // calculate string
-    $percent_sign=0;
     $output_str='';
     
     for ($i=0; $i<strlen($format); $i++){
-        switch($format[$i]){
-            case 'a':
-                if($percent_sign){ $output_str.=$j_week_name[date('D', $timestamp)]; $percent_sign=0; }
-                break;
-            case 'A':
-                if($percent_sign){ $output_str.=$j_week_name[date('l', $timestamp)]; $percent_sign=0; }
-                break;
-            case 'b':
-            case 'B':
-            case 'h':
-                if($percent_sign){ $output_str.=$j_month_name[$jm]; $percent_sign=0; }
-                break;
-            case 'c': // incomplete
-                if($percent_sign){ /*$output_str.=$format[$i];*/ $percent_sign=0; }
-                break;
-            case 'C':
-                if($percent_sign){ $output_str.=floor($jy/100); $percent_sign=0; }
-                break;
-            case 'd':
-                if($percent_sign){ if($jd<10) $output_str.='0'.$jd; else $output_str.=$jd; $percent_sign=0; }
-                break;
-            case 'D':
-                if($percent_sign){ $output_str.=$jm.'/'.$jd.'/'.$jy; $percent_sign=0; }
-                break;
-            case 'e':
-                if($percent_sign){ if($jd<10) $output_str.=' '.$jd; else $output_str.=$jd; $percent_sign=0; }
-                break;
-            case 'H':
-                if($percent_sign){ $output_str.=date('H', $timestamp); $percent_sign=0; }
-                break;
-            case 'I':
-                if($percent_sign){ $output_str.=date('h', $timestamp); $percent_sign=0; }
-                break;
-            case 'j':
-                if($percent_sign){ $output_str.=sprintf("%03d", $j_all_days); $percent_sign=0; }
-                break;
-            case 'm':
-                if($percent_sign){ if($jm<10) $output_str.='0'.$jm; else $output_str.=$jm; $percent_sign=0; }
-                break;
-            case 'M':
-                if($percent_sign){ $output_str.=date('i', $timestamp); $percent_sign=0; }
-                break;
-            case 'n':
-                if($percent_sign){ $output_str.="\n"; $percent_sign=0; }
-                break;
-            case 'r':
-            case 'p':
-                if($percent_sign){ if(date('a',$need)=='pm') $output_str.='بعد از ظهر'; else $output_str.='قبل از ظهر'; $percent_sign=0; }
-                break;
-            case 'R': // incomplete
-                if($percent_sign){ /*$output_str.=$format[$i];*/ $percent_sign=0; }
-                break;
-            case 'S':
-                if($percent_sign){ $output_str.=date('s', $timestamp); $percent_sign=0; }
-                break;
-            case 't':
-                if($percent_sign){ $output_str.="\t"; $percent_sign=0; }
-                break;
-            case 'u':
-            case 'U':
-            case 'V':
-            case 'W':
-            case 'w':
-                if($percent_sign){ $output_str.=$j_week_number[date('D', $timestamp)]; $percent_sign=0; }
-                break;
-            case 'x': // incomplete
-                if($percent_sign){ /*$output_str.=$format[$i];*/ $percent_sign=0; }
-                break;
-            case 'X': // incomplete
-                if($percent_sign){ /*$output_str.=$format[$i];*/ $percent_sign=0; }
-                break;
-            case 'g':
-            case 'y':
-                if($percent_sign){ $output_str.=$jy-(floor($jy/100)*100); $percent_sign=0; }
-                break;
-            case 'G':
-            case 'Y':
-                if($percent_sign){ $output_str.=$jy; $percent_sign=0; }
-                break;
-            case 'z':
-            case 'Z': // incomplete
-                if($percent_sign){ /*$output_str.=$format[$i];*/ $percent_sign=0; }
-                break;
-            case '%':
-                if($percent_sign){ $outpus_str.='%'; } else { $percent_sign=1; }
-                break;
-            default:
-                $output_str.=$format[$i];
-                $percent_sign=0;
+        
+        if($format[$i]=='%'){
+            $i++;
+            switch($format[$i]){
+                case 'a':
+                    $output_str.=$j_week_name[date('D', $timestamp)];
+                    break;
+                case 'A':
+                    $output_str.=$j_week_name[date('l', $timestamp)];
+                    break;
+                case 'b':
+                case 'B':
+                case 'h':
+                    $output_str.=$j_month_name[$jm];
+                    break;
+                case 'c':
+                    $output_str.=calendar_jalali_utf('%m/%d/%y %I:%M:%S', $timestamp);
+                    break;
+                case 'C':
+                    $output_str.=floor($jy/100);
+                    break;
+                case 'd':
+                    if($jd<10) $output_str.='0'.$jd; else $output_str.=$jd;
+                    break;
+                case 'D':
+                    $output_str.=$jm.'/'.$jd.'/'.$jy;
+                    break;
+                case 'e':
+                    if($jd<10) $output_str.=' '.$jd; else $output_str.=$jd;
+                    break;
+                case 'H':
+                    $output_str.=date('H', $timestamp);
+                    break;
+                case 'I':
+                    $output_str.=date('h', $timestamp);
+                    break;
+                case 'j':
+                    $output_str.=sprintf("%03d", $j_all_days);
+                    break;
+                case 'm':
+                    if($jm<10) $output_str.='0'.$jm; else $output_str.=$jm;
+                    break;
+                case 'M':
+                    $output_str.=date('i', $timestamp);
+                    break;
+                case 'n':
+                    $output_str.="\n";
+                    break;
+                case 'r':
+                case 'p':
+                    if(date('a',$timestamp)=='pm') $output_str.='بعد از ظهر'; else $output_str.='قبل از ظهر';
+                    break;
+                case 'R':
+                    $output_str.=strftime('%R', $timestamp);
+                    break;
+                case 'S':
+                    $output_str.=date('s', $timestamp);
+                    break;
+                case 't':
+                    $output_str.="\t";
+                    break;
+                case 'U':
+                case 'V':
+                case 'W':
+                    $output_str.=sprintf("%02d", floor(($j_all_days+1)/7));
+                    break;
+                case 'u':
+                case 'w':
+                    $output_str.=$j_week_number[date('D', $timestamp)];
+                    break;
+                case 'x':
+                    $output_str.=calendar_jalali_utf('%m/%d/%y', $timestamp);
+                    break;
+                case 'X':
+                    $output_str.=calendar_jalali_utf('%I:%M:%S', $timestamp);
+                    break;
+                case 'g':
+                case 'y':
+                    $output_str.=$jy-(floor($jy/100)*100);
+                    break;
+                case 'G':
+                case 'Y':
+                    $output_str.=$jy;
+                    break;
+                case 'z':
+                case 'Z':
+                    $output_str.=strftime('%z', $timestamp);
+                    break;
+                case '%':
+                    $outpus_str.='%';
+                    break;
+            }
+        }else{
+            $output_str.=$format[$i];
         }
     }