تبدیل تاریخ میلادی به شمسی

شروع موضوع توسط 3dsmax ‏8 مارس 2008 در انجمن برنامه‌نویسی با PHP

  1. 3dsmax

    3dsmax Member

    ارسال‌ها:
    214
    تشکر شده:
    65
    امتیاز دستاورد:
    16
    سلام من در موتور های جستجو در مورد تبدیل تاریخ میلادی به شمسی جستجو کردم ولی اون چیزی که می خواستم پیدا نکردم .
    حالا از دوستان می خوام ببینم چطور می شه تاریخ میلادی رو به شمسی تبدیل کرد و می خوام که روز , هفته , ماه , سال رو نمایش بده از دوستان می خوام اگه می تونم کمک کنن ممنون می شوم.:wink::)
     
    نوشته شده توسط 3dsmax در ‏8 مارس 2008
    amirkhoshhal از این پست تشکر کرده است.
  2. Zanguei

    Zanguei Member

    ارسال‌ها:
    324
    تشکر شده:
    101
    امتیاز دستاورد:
    16
    سلام
    در سایت iranphp میتونید یکیشو پیدا کنید که از تابعی به نام jdate برای تبدیل تاریخ میلادی به جلالی استفاده می کنه. بسیار تابع قدرتمندی است و مشابه date خود php عمل می کنه.
    موفق باشید.
     
    نوشته شده توسط Zanguei در ‏8 مارس 2008
    wearyminded و 3dsmax از این پست تشکر کرده اند.
  3. 3dsmax

    3dsmax Member

    ارسال‌ها:
    214
    تشکر شده:
    65
    امتیاز دستاورد:
    16
    سلام مچکرم از دوستان هیچ هواسم به search مجید آنلاین نبود یه search کردم به نتیجه رسیدم . یه کمکی هم تو کد دست بردم تا بهتر بشه . حالا گذاشتم اگه دوستان می خوان استفاده کنن.

    اینو تو فایلی به نام function.php بزارید.

    PHP:
    <?php
    function div($a,$b) {
        return (int) ($a / $b);
    }
    function gregorian_to_jalali ($g_y, $g_m, $g_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);    
       

       $gy = $g_y-1600;
       $gm = $g_m-1;
       $gd = $g_d-1;
       $g_day_no = 365*$gy+div($gy+3,4)-div($gy+99,100)+div($gy+399,400);
       for ($i=0; $i < $gm; ++$i)
          $g_day_no += $g_days_in_month[$i];
       if ($gm>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 = div($j_day_no, 12053); /* 12053 = 365*33 + 32/4 */
       $j_day_no = $j_day_no % 12053;
       $jy = 979+33*$j_np+4*div($j_day_no,1461); /* 1461 = 365*4 + 4/4 */
       $j_day_no %= 1461;
       if ($j_day_no >= 366) {
          $jy += div($j_day_no-1, 365);
          $j_day_no = ($j_day_no-1)%365;
       }
       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);
    }
    function week($mysql) {
    $date = date(w,$mysql);
        if ($date == '0') {
            return  "یکشنبه";
        }
        elseif ($date == '1') {
            return "دوشنبه";
        }
        elseif ($date == '2') {
            return "سه شنبه";
        }
        elseif ($date == '3') {
            return "چهارشنبه";
        }
        elseif ($date == '4') {
            return "پنجشنبه";
        }
        elseif ($date == '5') {
            return "جمعه";
        }
        else {
            return "شنبه";
        }
    }
    function jdate($mysql) {
        $TDy=date("Y",$mysql);
        $TDm=date("m",$mysql);
        $TDd=date("d",$mysql);
        $gdate=$TDy."-".$TDm."-".$TDd;
       
        list( $gyear, $gmonth, $gday ) = preg_split ( '/-/', $gdate );
        list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($gyear, $gmonth, $gday);
        $jdate = $jyear."/".$jmonth."/".$jday;
        return $jdate;
    }
    function day($mysql) {
    $day = date(a,$mysql);
        if ($day == 'am') {
            echo "قبل از ظهر";
        }
        else {
            echo "بعد از ظهر";
        }
    }
    function db_connect()
    {
       $result = mysql_connect("localhost","user","pass");
       if (!$result)
          return false;
       if (!mysql_select_db('نام بانک اطلاعاتی'))
          return false;
       return $result;
    }
    ?>

    این رو هم هر اسمی گذاشتید اشکال نداره

    PHP:
    <?php
    include('function.php');

    //////////////mysql///////////////////////////////////////////////

    $conn = db_connect();
    if (!$conn) {
        echo "error";
    }
    $query = "select * from نام جدول در بانک اطلاعاتی";
    $result = mysql_query($query);
    if (!$result) {
        echo "error";
    }
    $num = mysql_num_rows($result);
    for($i = 0; $i < $num; $i ++) {
    $row = mysql_fetch_array($result);
    $mysql = $row[فیلد مورد نظردر بانک اطلاعاتی];

    //////////////veiw///////////////////////////////////////////////////

    echo jdate($mysql);
    echo "<br />";
    echo date("h:i:s", $mysql);
    echo "<br />";
    echo day($mysql);
    echo "<br />";
    echo week($mysql);
    echo "<br /><br />";
    }
    ?>
    یه مشکل من تو این کد دیدم و اینکه تو سال 1387 رو اگه بش توجه کنید آخرین ماهش (اسفند) به جای 29 روز 30 روز و این کد تا 29 مینداره ماه آخرو حالا خودتون می دونید فلن بایی:D:)
     
    آخرین ویرایش: ‏9 مارس 2008
    نوشته شده توسط 3dsmax در ‏9 مارس 2008
    wearyminded از این پست تشکر کرده است.
  4. Zanguei

    Zanguei Member

    ارسال‌ها:
    324
    تشکر شده:
    101
    امتیاز دستاورد:
    16
    تاریخ شمسی

    سلام
    اینو امتحانش کن. کاملتره
    موفق باشی
     

    پیوست ها:

    • shamsidate.zip
      اندازه فایل:
      کیلوبایت 3.5
      نمایش ها:
      167
    نوشته شده توسط Zanguei در ‏9 مارس 2008
    wearyminded، A_R_K، amirkhoshhal و 2 نفر دیگر از این ارسال تشکر کرده اند.
  5. zoghal

    zoghal Active Member

    ارسال‌ها:
    285
    تشکر شده:
    51
    امتیاز دستاورد:
    28
    نوشته شده توسط zoghal در ‏12 مارس 2008
    BassGraphic، 3dsmax و Zanguei از این ارسال تشکر کرده اند.
  6. Zanguei

    Zanguei Member

    ارسال‌ها:
    324
    تشکر شده:
    101
    امتیاز دستاورد:
    16
    سلام دوست عزیز
    تابعی که من معرفی کردم از کدی که جناب 3dmax معرفی کردند کامل تر هست اما با اونی که شما لینکش رو گذاشتید فرقی نمی کنه و هر دو یکی هستن و نویسنده هاشون هم یکی هستن فقط چند تفاوت کوچک داشتن که فکر کنم اونی که شما گذاشتین ورژنش جدید تر باشه.
    موفق باشید.
     
    نوشته شده توسط Zanguei در ‏12 مارس 2008
    wearyminded، best4best، BassGraphic و یک نفر دیگر از این ارسال تشکر کرده اند.
  7. rasoooli

    rasoooli Member

    ارسال‌ها:
    289
    تشکر شده:
    214
    امتیاز دستاورد:
    16
    چگونه از اين تابع براي oScommerce استفاده كنم !
     
    نوشته شده توسط rasoooli در ‏2 می 2008
    BassGraphic از این پست تشکر کرده است.
  8. aghamir

    aghamir Member

    ارسال‌ها:
    156
    تشکر شده:
    3
    امتیاز دستاورد:
    16

    میشه یک توضیح در مورد طریقه گزاشتن کد در صفحه بدید ؟
    من زیاد سر در نیاوردم :-?
     
    نوشته شده توسط aghamir در ‏6 سپتامبر 2008
  9. amir_s

    amir_s Active Member

    ارسال‌ها:
    3,684
    تشکر شده:
    403
    امتیاز دستاورد:
    36
    چه طور میتونیم از این توابع و کلاس ها استفاده کنیم که ببینیم فلان روز چند شنبه بوده !؟
     
    نوشته شده توسط amir_s در ‏6 سپتامبر 2008
  10. Zanguei

    Zanguei Member

    ارسال‌ها:
    324
    تشکر شده:
    101
    امتیاز دستاورد:
    16
    سلام دوست عزیز
    شما باید توسط با استفاده از تابع require_once فایل مربوط مبدل تاریخ رو در صفحه خودتون لود کنید و باقی راه مشابه استفاده از تابع date در php می باشد. به همین راحتی. فقط به جای استفاده از تابع date از تابع pdate یا jdate هر کدام که در فایل مبدل وجود داشت استفاده می کنید.
    موفق باشید.
     
    نوشته شده توسط Zanguei در ‏7 سپتامبر 2008
    wearyminded، HoSsEin-StaR و 3dsmax از این ارسال تشکر کرده اند.
  11. 3dsmax

    3dsmax Member

    ارسال‌ها:
    214
    تشکر شده:
    65
    امتیاز دستاورد:
    16
    نوشته شده توسط 3dsmax در ‏7 سپتامبر 2008
    wearyminded، A_R_K و amir_s از این ارسال تشکر کرده اند.

به اشتراک بگذارید