نمایش نتایج 1 تا 10 از 10

نام تاپیک: تصحیح اختلاف ساعت سرور با ساعت ایران در php

  1. #1

    تصحیح اختلاف ساعت سرور با ساعت ایران در php

    با سلام خدمت دوستان عزیز ؛
    من از کد php برای نمایش تاریخ شمسی استفاده می کنم ، ولی اختلاف ساعت بین سرور و ساعت ایران بسیار زیاد است ، یعنی ، تاریخ به جای اینکه بعد از ساعت 12 شب عوض بشه ، بعد از ظهر روز بعد عوض میشه ، اگه ممکنه دوستان یه کدی برای اصلاح این اختلاف ارائه بدن . کدی که من از اون استفاده می کنم ( کدی که دوستان همین انجمن زحمتش رو کشیده بودن ) در زیر آوردم ، فقط خواهشاً از اصطلاحات حرفه ای استفاده نکنین که چیز زیادی از پی اچ پی نمی دونم .
    خیلی خیلی ممنون میشم اگه یه اصلاحیه درست و حسابی برای این کد بنویسین .
    کد پی اچ پی :

    <?php
    define("_JDF_USE_PERSIANNUM","0");
    define("_JDF_TZhours","0");
    define("_JDF_TZminute","0");
    define('_JDF_AM_LONG','صبح');
    define('_JDF_PM_LONG','عصر');
    define('_JDF_AM_SHORT','ق.ظ');
    define('_JDF_PM_SHORT','ب.ظ');
    define('_JDF_Sat_LONG','شنبه');
    define('_JDF_Sun_LONG','یکشنبه');
    define('_JDF_Mon_LONG','دوشنبه');
    define('_JDF_Tue_LONG','سه شنبه');
    define('_JDF_Wed_LONG','چهارشنبه');
    define('_JDF_Thu_LONG','پنجشنبه');
    define('_JDF_Fri_LONG','جمعه');
    define('_JDF_Sat_SHORT','ش');
    define('_JDF_Sun_SHORT','ی');
    define('_JDF_Mon_SHORT','د');
    define('_JDF_Tue_SHORT','س');
    define('_JDF_Wed_SHORT','چ');
    define('_JDF_Thu_SHORT','پ');
    define('_JDF_Fri_SHORT','ج');
    define('_JDF_Suffix','م');
    define('_JDF_Far','فروردین');
    define('_JDF_Ord','اردیبهشت');
    define('_JDF_Kho','خرداد');
    define('_JDF_Tir','تیر');
    define('_JDF_Mor','مرداد');
    define('_JDF_Sha','شهریور');
    define('_JDF_Meh','مهر');
    define('_JDF_Aba','آبان');
    define('_JDF_Aza','آذر');
    define('_JDF_Dey','دی');
    define('_JDF_Bah','بهمن');
    define('_JDF_Esf','اسفند');
    define('_JDF_Num0','۰');
    define('_JDF_Num1','۱');
    define('_JDF_Num2','۲');
    define('_JDF_Num3','۳');
    define('_JDF_Num4','۴');
    define('_JDF_Num5','۵');
    define('_JDF_Num6','۶');
    define('_JDF_Num7','۷');
    define('_JDF_Num8','۸');
    define('_JDF_Num9','۹');
    $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);
    $j_month_name = array("", "فروردین", "اردیبهشت", "خرداد", "تیر","مرداد", "شهریور", "مهر", "آبان", "آذر","دی", "بهمن", "اسفند");
    $j_day_name = array("یکشنبه","دوشنبه","سه شنبه","چهارشنبه","پنجشنبه","ج عه","شنبه");
    $jday_abbrev = array("ی","د","س","چ","پ","ج","ش");
    /* Farsiweb.info Jaladi/Gregorian Convertion Functions */
    function div($a, $b)
    {
    return (int) ($a / $b);
    }
    function jalali_to_gregorian($j_y, $j_m, $j_d)
    {
    global $g_days_in_month;
    global $j_days_in_month;
    $jy = $j_y-979;
    $jm = $j_m-1;
    $jd = $j_d-1;
    $j_day_no = 365*$jy + div($jy, 33)*8 + div($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*div($g_day_no, 146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
    $g_day_no = $g_day_no % 146097;
    $leap = true;
    if ($g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */
    {
    $g_day_no--;
    $gy += 100*div($g_day_no, 36524); /* 36524 = 365*100 + 100/4 - 100/100 */
    $g_day_no = $g_day_no % 36524;
    if ($g_day_no >= 365)
    $g_day_no++;
    else
    $leap = false;
    }
    $gy += 4*div($g_day_no, 1461); /* 1461 = 365*4 + 4/4 */
    $g_day_no %= 1461;
    if ($g_day_no >= 366) {
    $leap = false;
    $g_day_no--;
    $gy += div($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);
    }
    function jcheckdate($j_m, $j_d, $j_y)
    {
    global $j_days_in_month;
    if ($j_y < 0 || $j_y > 32767 || $j_m < 1 || $j_m > 12 || $j_d < 1 || $j_d >
    ($j_days_in_month[$j_m-1] + ($j_m == 12 && !(($j_y-979)%33%4))))
    return false;
    return true;
    }
    function gregorian_week_day($g_y, $g_m, $g_d)
    {
    global $g_days_in_month;
    $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;
    return ($g_day_no + 5) % 7 + 1;
    }
    function jalali_week_day($j_y, $j_m, $j_d)
    {
    global $j_days_in_month;
    $jy = $j_y-979;
    $jm = $j_m-1;
    $jd = $j_d-1;
    $j_day_no = 365*$jy + div($jy, 33)*8 + div($jy%33+3, 4);
    for ($i=0; $i < $jm; ++$i)
    $j_day_no += $j_days_in_month[$i];
    $j_day_no += $jd;
    return ($j_day_no + 2) % 7 + 1;
    }

    function gregorian_to_jalali($g_y, $g_m, $g_d)
    {
    global $g_days_in_month;
    global $j_days_in_month;
    $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);
    $j_day_no %= 12053;
    $jy = 979+33*$j_np+4*div($j_day_no,1461);
    $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 jdate($type,$maket="now",$forcelatinnums=false)
    {
    $result="";
    if($maket=="now"){
    $year=date("Y");
    $month=date("m");
    $day=date("d");
    list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
    $maket=jmaketime(date("h")+_JDF_TZhours,date("i")+ _JDF_TZminute,date("s"),$jmonth,$jday,$jyear);
    }else{
    $maket+=_JDF_TZhours*3600+_JDF_TZminute*60;
    $date=date("Y-m-d",$maket);
    list( $year, $month, $day ) = preg_split ( '/-/', $date );
    list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
    }
    $need= $maket;
    $year=date("Y",$need);
    $month=date("m",$need);
    $day=date("d",$need);
    $i=0;
    $skipnext = false;
    while($i<strlen($type))
    {
    $subtype=substr($type,$i,1);

    if ($skipnext) {
    $result .= $subtype;
    $skipnext = false;
    $i++;
    continue;
    }


    switch ($subtype)
    {
    case "A":
    $result1=date("a",$need);
    if($result1=="pm")
    $result.=_JDF_PM_LONG;
    else
    $result.=_JDF_AM_LONG;
    break;
    case "a":
    $result1=date("a",$need);
    if($result1=="pm")
    $result.=_JDF_PM_SHORT;
    else
    $result.=_JDF_AM_SHORT;
    break;

    case "d":
    list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
    if($jday<10)
    $result1="0".$jday;
    else
    $result1=$jday;

    $result.=$result1;
    break;

    case "D":
    $result1=date("D",$need);
    if($result1=="Sat") $result1=_JDF_Sat_SHORT;
    else if($result1=="Sun") $result1=_JDF_Sun_SHORT;
    else if($result1=="Mon") $result1=_JDF_Mon_SHORT;
    else if($result1=="Tue") $result1=_JDF_Tue_SHORT;
    else if($result1=="Wed") $result1=_JDF_Wed_SHORT;
    else if($result1=="Thu") $result1=_JDF_Thu_SHORT;
    else if($result1=="Fri") $result1=_JDF_Fri_SHORT;
    $result.=$result1;
    break;

    case"F":
    list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
    $result.=monthname($jmonth);
    break;

    case "g":
    $result1=date("g",$need);
    $result.=$result1;
    break;

    case "G":
    $result1=date("G",$need);
    $result.=$result1;
    break;

    case "h":
    $result1=date("h",$need);
    $result.=$result1;
    break;

    case "H":
    $result1=date("H",$need);
    $result.=$result1;
    break;

    case "i":
    $result1=date("i",$need);
    $result.=$result1;
    break;

    case "j":
    list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
    $result1=$jday;
    $result.=$result1;
    break;

    case "l":
    $result1=date("l",$need);
    if($result1=="Saturday") $result1=_JDF_Sat_LONG;
    else if($result1=="Sunday") $result1=_JDF_Sun_LONG;
    else if($result1=="Monday") $result1=_JDF_Mon_LONG;
    else if($result1=="Tuesday") $result1=_JDF_Tue_LONG;
    else if($result1=="Wednesday") $result1=_JDF_Wed_LONG;
    else if($result1=="Thursday") $result1=_JDF_Thu_LONG;
    else if($result1=="Friday") $result1=_JDF_Fri_LONG;
    $result.=$result1;
    break;

    case "m":
    list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
    if($jmonth<10)
    $result1="0".$jmonth;
    else
    $result1=$jmonth;
    $result.=$result1;
    break;

    case "M":
    list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
    $result.=monthname($jmonth);
    break;

    case "n":
    list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
    $result1=$jmonth;
    $result.=$result1;
    break;

    case "s":
    $result1=date("s",$need);
    $result.=$result1;
    break;

    case "S":
    $result.=_JDF_Suffix;
    break;

    case "t":
    $result.=lastday ($month,$day,$year);
    break;

    case "w":
    $result1=date("w",$need);
    $result.=$result1;
    break;

    case "y":
    list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
    $result1=substr($jyear,2,4);
    $result.=$result1;
    break;

    case "Y":
    list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
    $result1=$jyear;
    $result.=$result1;
    break;

    case "\\":
    $result.='';
    $skipnext = true;
    break;

    default:
    $result.=$subtype;
    }
    $i++;
    }

    $mps_jd_farsinum_date = $mps_jd_optionsDB['mps_jd_farsinum_date'];

    if ((!$forcelatinnums) && ($mps_jd_farsinum_date))
    $result = farsi_num($result);

    return $result;
    }

    function jmaketime($hour,$minute,$second,$jmonth,$jday,$jye ar)
    {
    list( $year, $month, $day ) = jalali_to_gregorian($jyear, $jmonth, $jday);
    $i=mktime((int) $hour,(int) $minute,(int) $second, (int) $month, (int) $day, (int) $year, 0);
    return $i;
    }

    ///Find Day Begining Of Month
    function mstart($month,$day,$year)
    {
    list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
    list( $year, $month, $day ) = jalali_to_gregorian($jyear, $jmonth, "1");
    $timestamp=mktime(0,0,0,$month,$day,$year);
    return date("w",$timestamp);
    }
    //Find Number Of Days In This Month
    function lastday ($month,$day,$year)
    {
    $lastdayen=date("d",mktime(0,0,0,$month+1,0,$year) );
    list( $jyear, $jmonth, $jday ) = gregorian_to_jalali($year, $month, $day);
    $lastdatep=$jday;
    $jday=$jday2;
    while($jday2!="1")
    {
    if($day<$lastdayen)
    {
    $day++;
    list( $jyear, $jmonth, $jday2 ) = gregorian_to_jalali($year, $month, $day);
    if($jdate2=="1") break;
    if($jdate2!="1") $lastdatep++;
    }
    else
    {
    $day=0;
    $month++;
    if($month==13)
    {
    $month="1";
    $year++;
    }
    }
    }
    return $lastdatep-1;
    }
    //translate number of month to name of month
    function monthname($month)
    {
    $month_map = array(1 => _JDF_Far, 2 => _JDF_Ord, 3 => _JDF_Kho, 4 => _JDF_Tir
    , 5 => _JDF_Mor, 6 => _JDF_Sha, 7 => _JDF_Meh, 8 => _JDF_Aba, 9 => _JDF_Aza
    , 10 => _JDF_Dey, 11 => _JDF_Bah, 12 => _JDF_Esf);
    return $month_map[(int) $month];
    }

    $m = gmdate('YmdHis');
    /*
    s = ثانیه
    i = دقیقه
    h = ساعت
    l = روزهای هفته
    D = حرف اول روزهای هفته
    d = روز شمسی
    M = نام ماه شمسی
    m = نمایش ماه شمسی به عدد
    Y = سال شمسی
    y = سال شمسی دو عدد آخر سال
    echo jdate('l؛ d M Y');
    */
    echo jdate('l d M Y');
    ?>


    با تشکر فروان

  2. #2

    نقل قول: تصحیح اختلاف ساعت سرور با ساعت ایران در php

    اول فایل بنویس

    date_default_timezone_set ('Asia/Tehran');

  3. #3

    نقل قول: تصحیح اختلاف ساعت سرور با ساعت ایران در php

    نقل قول نوشته شده توسط rapidpich مشاهده تاپیک
    اول فایل بنویس



    date_default_timezone_set ('Asia/Tehran');
    ممنون از توجهتون ، ولی من ، قبلاً از این روش استفاده کردم نتیجه نگرفتم . آیا روش دیگه وجود نداره که مستقیماً بشه اختلاف ساعت رو اضافه کرد ؟

  4. #4

    نقل قول: تصحیح اختلاف ساعت سرور با ساعت ایران در php

    یعنی این کار نکرد؟ اونوقت ساعت سرور مشکل داره. یا شاید من اشتباه میکنم. من هر وقت اینکارو کردم درست شد.

  5. #5
    کاربر دائمی آواتار morteza271
    تاریخ عضویت
    اسفند 1387
    محل زندگی
    مشهد
    پست
    1,723

    نقل قول: تصحیح اختلاف ساعت سرور با ساعت ایران در php

    منم همین مشکلو دارم ولی من از ساعت 17 تاریخ رئ یه روز میبره جلو و اونم به دلیل اینه که ساعت سرور از ساعت ایران 7ساعت جلوتره ولی نتونستم درستش کنم!!!(با دستور بالا هم درست نشد!)چیکار کنم؟!!!

  6. #6
    کاربر دائمی آواتار Reza1607
    تاریخ عضویت
    شهریور 1387
    محل زندگی
    يه جايي تو مشهد
    پست
    969

    نقل قول: تصحیح اختلاف ساعت سرور با ساعت ایران در php

    یه راه حل مگه امیدوارم : 1) بهم نخندید 2) مشکلتون حل بشه
    شما زمانی که می خواین ساعت و تاریخ رو به تابع ارسال کنید ابتدا اون اختلاف رو از ساعت سرور کم یا زیاد کنید بعد به تابع ارسال کنید.

  7. #7

    نقل قول: تصحیح اختلاف ساعت سرور با ساعت ایران در php

    نقل قول نوشته شده توسط Reza1607 مشاهده تاپیک
    یه راه حل مگه امیدوارم : 1) بهم نخندید 2) مشکلتون حل بشه
    شما زمانی که می خواین ساعت و تاریخ رو به تابع ارسال کنید ابتدا اون اختلاف رو از ساعت سرور کم یا زیاد کنید بعد به تابع ارسال کنید.
    دوست عزیز ، ممنون ، ولی من اصلاً منظورتون رو نفهمیدم . اگه ممکنه روی کد بگین کدوم قسمت رو باید تغییر بدم . با تشکر

  8. #8

    نقل قول: تصحیح اختلاف ساعت سرور با ساعت ایران در php

    ساعت رو رو ایران نگزار بزار یک جای دیگه مثلا آلمان یا اندونزی(بسته به اینکه ساعت جلوتره یا عقبتر ) از زمان یک کشور دیگه استفاده کن.
    مثلا اگه ساعت 2.5 ساعت عقب تره میتونی از ساعت آلمان استفاده کنی. یا اگه 4-5 ساعت جلوتره میتونی از استرالیا یا مالزی استفاده کنی.

  9. #9

    نقل قول: تصحیح اختلاف ساعت سرور با ساعت ایران در php

    دوست عزیز
    از تابع putenv استفاده کنید.

    putenv ('TZ=Asia/Tehran');

    موفق باشید
    ما را نه غم دوزخ و نی حرص بهشت است!
    www.yaqubian.com

  10. #10

    نقل قول: تصحیح اختلاف ساعت سرور با ساعت ایران در php

    اصلا چه نیازی به این کاره؟ از این استفاده کنید: http://oxygenws.com/blog/archives/72-..-..html

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •