یکشنبه ۳۰ اردیبهشت ۱۴۰۳

Sunday, May 19, 2024 GMT +3:30

تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP

php-date-time

یکی از موارد پرکاربرد در طراحی و برنامه نویسی سایت ها و صفحات فارسی زبان نمایش تاریخ هجری شمسی به اشکال مختلف است، برنامه نویسان وب معمولا برای سازگاری و ایجاد قابلیت های چندگانه در برنامه هایشان به صورت پیش فرض در ساختار، سورس کدها و فیلدهای دیتابیس از تاریخ میلادی استفاده می کنند که جنبه درون برنامه ای دارد و به صورت ذاتی با توابع یا امکانات سرور و پایگاه داده سازگار است، اما اگر بخواهیم این فرمت های پیش فرض را به صورت محلی و به زبان کاربر نمایش دهیم قاعدتا باید آنها را بر اساس فرمول و قاعده خاص گاهشماری مقصد تبدیل کنیم، بر همین اساس یکی از رایج ترین این موارد تبدیل تاریخ میلادی به هجری شمسی در PHP است که برای آن مبدلی تحت عنوان JDF توسط برنامه نویسان فارسی زبان نوشته و توسعه داده شده که در این مطلب می خواهیم با چند و چون کار و نحوه استفاده از آن آشنا شویم.

مبدل JDF چیست؟


همان طور که از معنی عبارت "مبدل" مشخص است، JDF تبدیل کننده تاریخ از میلادی به شمسی و از شمسی به میلادی است که برای این منظور از چند تابع مختلف که همگی در یک فایل PHP گنجانده شده اند استفاده می کند، این دستورات و توابع توسط برنامه نویسان سایت "مرکز دریافت بسته های کاربردی" به آدرس
https://scr.ir
نوشته و توسعه داده شده اند که در همین آدرس می توانیم تاریخچه و راهنمای کاملی از نحوه شکل گیری و تکامل این ابزار را مطالعه کنیم.

آیا برای نمایش تاریخ هجری شمسی، JDF تنها راه حل است؟!


قاعدتا خیر، یادآور می شویم در صورت مطالعه و آشنایی با اصول تقویم میلادی و گاهشمار هجری شمسی، تسلط بر برنامه نویسی و صرف وقت و حوصله کافی می توانیم توابع شخصی و مشابه حداقل جهت رفع نیازهای عادی طراحی کنیم، به عبارتی استفاده از JDF تنها روش برای تبدیل و نمایش تاریخ به صورت هجری شمسی نیست و راه برای ایجاد توابع و شیوه های سفارشی و جدید همواره باز است، JDF یک راه حل دم دستی، جامع، سریع و البته حرفه ای و خوب است که با توجه به رایگان بودن آن می تواند در هر کجا که نیاز باشد مورد استفاده قرار گیرد.

دانلود JDF، مبدل تاریخ میلادی، شمسی به زبان PHP


قبل از پرداختن به ادامه آموزش، ابتدا آخرین نسخه مبدل تاریخ میلادی، هجری شمسی (JDF) را از آدرس 
http://jdf.scr.ir
دانلود یا از لینک زیر نسخه ای از آن را از «وبگو» دریافت کنید:
دانلود JDF، مبدل تاریخ میلادی به هجری شمسی - تاریخ به روزرسانی فایل ZIP در «وبگو»: آبان 1396

نحوه استفاده از فایل jdf.php در برنامه ها


پس از دانلود فایل مبدل تاریخ میلادی به شمسی و شمسی به میلادی JDF، قاعدتا اولین کار include کردن آن در سورس کدهای برنامه PHP است که به روش نمونه زیر انجام می شود:
include_once('jdf.php');
به این ترتیب توابع این فایل در کدها در دسترس و قابل استفاده خواهند بود، فایل jdf.php چندین تابع مختلف را در خود جای داده اما برای کاربردهای عادی سه تابع jdate، gregorian_to_jalali و jalali_to_gregorian بیشترین اهمیت را دارند که در خصوص کارکرد و نحوه استفاده از آنها در ادامه به صورت موردی صحبت خواهیم کرد.
نکته: چنانچه خطای 
Fatal error: Call to undefined function: date_default_timezone_set()
را دریافت کردید، خط مربوط به date_default_timezone_set را در خطوط ابتدایی فایل jdf.php حذف یا (با افزودن // در ابتدای آن) به صورت کامنت در آورید، نمایش خطا به این دلیل است که قابلیت date_default_timezone_set تنها برای نسخه 5.1.0 به بعد در PHP قابل دسترس است.

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


برای تبدیل تاریخ میلادی به هجری شمسی ابتدا باید دید تاریخ میلادی با چه فرمتی در کدهای PHP استفاده یا در فیلدهای دیتابیس ذخیره شده است، برنامه نویسان معمولا از دو فرمت رایج Unix، به طور مثال:
1510803458
یا تاریخ و زمان به صورت استاندارد، به طور مثال:
2017-11-16 03:37:38
استفاده می کنند، Unix یک مقدار عددی قابل فهم برای ماشین است که بر اساس اختلاف زمان به ثانیه از مبدا GMT یعنی نیمه شب (ساعت 0) 1 ژانویه 1970 میلادی تا زمان مقصد محاسبه شده و با تبدیل آن بر اساس فرمول های خاص می توانیم تاریخ و زمان مد نظر را به شکل قابل فهم برای انسان بدست آوریم، در حالت Unix فرآیند تبدیل تاریخ میلادی به شمسی ساده خواهد بود، کافی است مقدار عددی را به صورت برچسب زمان به عنوان آرگیومنت به تابع jdate داده و معادل تاریخ هجری شمسی آن را با توجه به تنظیمات در خروجی دریافت کنیم، به فرض:
<?php
$timestamp = '1510803458';
$jalali_date = jdate("تاریخ:Y/m/d زمان:H:i:s", $timestamp);
?>
<div class="rtl"><?php echo $jalali_date; ?></div>
با اجرای این کد در خروجی تاریخ هجری شمسی چاپ خواهد شد، نکته مهم این کد نحوه استفاده از آرگیومنت های تابع jdate است که مشابه با تابع date در PHP هر حرف لاتین نماد یک شکل از تاریخ و زمان در این تابع است، به طور مثال حرف Y سال شمسی را به صورت عددی و کامل چاپ می کند، برای مشاهده جدول راهنمای این حروف می توانیم به آدرس زیر مراجعه نمائیم:
https://jdf.scr.ir/rahnama/?t=jdate
اما اگر تاریخ و زمان کدهای PHP یا مقادیر ذخیره شده در دیتابیس به صورت Unix نباشد، ابتدا باید تاریخ و زمان میلادی را به صورت فرمت استاندارد (سال-ماه-روز ساعت:دقیقه:ثانیه) دریافت کرده سپس پس از تجزیه تاریخ و زمان از طریق تابع explode در PHP و نهایتا تبدیل آرایه های حاصله به متغیر با کمک list، با استفاده از تابع mktime تاریخ و زمان را به صورت Unix و برچسب زمان (Timestamp) در آوریم، سپس مقدار عددی Unix را به عنوان آرگیومنت به تابع jdate داده و در نهایت تبدیل شده شمسی آن را دریافت می کنیم، مثال زیر روشن است:
<?php
$date = '2017-11-16 03:37:38';
$array = explode(' ', $date);
//print_r($array);
list($year, $month, $day) = explode('-', $array[0]);
list($hour, $minute, $second) = explode(':', $array[1]);
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
//echo $timestamp;
$jalali_date = jdate("تاریخ:Y/m/d زمان:H:i:s", $timestamp);
?>
<div class="rtl"><?php echo $jalali_date; ?></div>
در صورتی که از آرایه با دستور print_r خروجی بگیریم تاریخ و زمان به صورت جداگانه چاپ خواهند شد:
Array ( [0] => 2017-11-16 [1] => 03:37:38 )
اگر از متغیر timestamp نیز با دستور echo خروجی بگیریم مقدار عددی 1510803458 چاپ خواهد شد.
نکته 1: تابع jdate درون خود از تابع gregorian_to_jalali استفاده می کند، در واقع تاریخ میلادی به این تابع داده شده و معادل شمسی آن به صورت آرایه (سال، ماه و روز) یا رشته متنی (در صورتی که آرگیومنت چهارم تنظیم شود) برگردانده می شود، سپس تابع jdate با استفاده از این اطلاعات بر اساس تنظیمات کاربر خروجی نهایی را چاپ می کند.
نکته 2: تابع jdate برای نمایش تاریخ و زمان فعلی سرور بصورت هجری شمسی نیز مورد استفاده قرار می گیرد، در این صورت نیازی به آرگیومنت دوم یعنی برچسب زمان نیست، مثال:
echo jdate("تاریخ:Y/m/d زمان:H:i:s");
نکته 3: در صورتی که تاریخ و زمان در فیلدهای دیتابیس ذخیره شده باشند، قاعدتا ابتدا باید با اجرای پرس و جو از دیتابیس استخراج و سپس به متغیر PHP نسب داده شوند، به طور مثال:
<?php
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn) {
    echo "Error!: " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else {
    $id = mysqli_real_escape_string($conn, @$_GET['id']);
    $sql = "SELECT date_col FROM tbl WHERE id = $id LIMIT 1";
    $query = mysqli_query($conn, $sql);
    if(!$query) {
        echo "Error!: " . mysqli_error($conn);
    } else {
        while($row = mysqli_fetch_array($query)){
            $date = $row['date_col'];
        }
    }
}
mysqli_close($conn);
?>
در این مثال از اکستنشن MySQLi در حالت برنامه نویسی رویه ای (Procedural) استفاده شده که روشی عمومی و به اصطلاح دم دستی است، قاعدتا برای حالت های پیشرفته  تر می توانیم از حالت شی گرا یا اکستنشن PDO نیز استفاده کنیم (در عمل صرفا خروجی برایمان ملاک است و تفاوتی بین روش ها از این نظر وجود ندارد).

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


اگرچه برای تبدیل تاریخ میلادی به هجری شمسی استفاده از تابع jdate کفایت می کند، اما به جهت اینکه خود این تابع از تابع دیگری به نام gregorian_to_jalali استفاده می کند، بد نیست این تابع را نیز بررسی کنیم.
function gregorian_to_jalali($gy, $gm, $gd, $mod='')
تابع gregorian_to_jalali تاریخ میلادی را به صورت سه آرگیومنت (سال، ماه و روز) دریافت و تبدیل شده شمسی آن را بر اساس محاسبات مربوط به تبدیل تاریخ ها به عنوان نتیجه به صورت آرایه یا رشته متنی بر می گرداند، آرگیومنت چهارم این تابع با عنوان mod می تواند یک علامت متنی مانند - یا / باشد، در این صورت نتیجه به صورت رشته متنی برگردانده می شود، نمونه کد نحوه استفاده مستقیم از این تابع:
<?php
$timezone = 0;
$year = date('Y', time() + $timezone);
$month = date('n', time() + $timezone);
$day = date('j', time() + $timezone);
print_r(gregorian_to_jalali($year, $month, $day));
?>
که خروجی نمونه کد بالا به صورت زیر خواهد بود:
Array ( [0] => 1396 [1] => 8 [2] => 25 )
اگر آرگیومنت چهارم مقداردهی شود خروجی به صورت رشته متنی خواهد بود:
echo gregorian_to_jalali($year, $month, $day, '/');
که در اینصورت خروجی برابر است با:
1396/8/25
نکته 1: در نمونه کد بالا اختلاف از GMT را در متغیر دلخواه timezone برابر 0 قرار داده ایم، اگر زمان سرور شما بر روی GMT تنظیم شده است باید برای سازگاری با زمان محلی ایران، اختلاف 3:30 از GMT عدد 12600 و برای 4:30 (شش ماهه اول سال، ساعت تابستانی) عدد 16200 را برای متغیر timezone قرار دهید، هر ساعت اختلاف از GMT برابر است با 60 دقیقه ضرب در 60 ثانیه (60*60) و نتیجه برابر است با 3600 ثانیه (یک ساعت برابر 3600 ثانیه)، 3:30 برابر می شود با 12600 و 4:30 برابر است با 16200 ثانیه.
نکته 2: تنها تفاوت بین استفاده از حروف n و j با m و d در تابع date در این است که اعداد کوچکتر از 10 به صورت بدون صفر یا با صفر در ابتدا نمایش داده می شوند (به طور مثال 8 یا 08).

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


function jalali_to_gregorian($jy, $jm, $jd, $mod='')
مشابه آنچه در خصوص تابع gregorian_to_jalali گفتیم در اینجا نیز کافی است سال، ماه و روز مد نظر در تاریخ هجری شمسی را به عنوان آرگیومنت به تابع jalali_to_gregorian بدهیم و تبدیل شده میلادی آن را بر اساس محاسبات خاص به صورت آرایه یا در صورتی که آرگیومنت چهارم تنظیم شود، به صورت رشته متنی دریافت کنیم، مثال زیر روشن است:
<?php
$date = '1396/8/25';
$array = explode('/', $date);
$year = $array[0];
$month = $array[1];
$day = $array[2];
print_r(jalali_to_gregorian($year, $month, $day));
?>
که خروجی نمونه کد بالا به شکل زیر خواهد بود:
Array ( [0] => 2017 [1] => 11 [2] => 16 )
اگر آرگیومنت چهارم مقداردهی شود خروجی به صورت رشته متنی خواهد بود:
echo jalali_to_gregorian($year, $month, $day, '/');
که در اینصورت خروجی برابر است با:
2017/11/16
همانطور که مشخص است برای اینکه خروجی به صورت رشته متنی باشد، کافی است آرگیومنت چهارم را با یک علامت مانند - یا / مقداردهی و به جای print_r از echo استفاده کنیم.

مثال و پیش نمایش آنلاین


برای جمع بندی این آموزش مثال ها و پیش نمایش آنلاین تبدیل تاریخ میلادی به شمسی و شمسی به میلادی را در قالب یک فایل تست و بررسی می کنیم:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | تبدیل تاریخ میلادی، شمسی</title>
<!-- Webgoo.ir -->
<style type="text/css">
body{
    direction:rtl;    
}
.ltr{
    direction:ltr;
}
.rtl{
    direction:rtl;
}
</style>
</head>
<body>
<?php
include_once('jdf.php');
$date = '2017-11-16 03:37:38';
$array = explode(' ', $date);
list($year, $month, $day) = explode('-', $array[0]);
list($hour, $minute, $second) = explode(':', $array[1]);
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
$jalali_date = jdate("تاریخ:Y/m/d زمان:H:i:s", $timestamp);
?>
<div class="rtl"><?php echo $jalali_date; ?></div>
<?php
$date = '1396/8/25 03:37:38';
$array = explode(' ', $date);
list($year, $month, $day) = explode('/', $array[0]);
$gregorian_date = 'Date:' . jalali_to_gregorian($year, $month, $day, '-') . ' Time:' . $array[1];
?>
<div class="ltr"><?php echo $gregorian_date; ?></div>
<hr>
با توجه به اینکه بیشتر توابع و امکانات درونی MySQL صرفا با تاریخ میلادی سازگار هستند، توصیه می شود تاریخ دیتابیس را همواره به صورت میلادی با یکی از فرمت های استاندارد یا به صورت Unix ذخیره کنیم و صرفا در حالت نمایشی از تاریخ هجری شمسی استفاده نمائیم.
</body>
</html>
پیش نمایش
دسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس
ارسال پارامتر به URL و دریافت مقادیر با PHP
نمایش قسمتی از متن و پاراگراف با PHP
ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
دیدگاه
more ۹۳ دیدگاه برای این مطلب ارسال شده است.
more دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
محمدصادقی
۰۹:۲۷ ۱۳۹۴/۱۲/۱۳
سلام مرسی از جوابتون از این برای تاریخ شمسی هم میشود استفاده کرد؟
بله، منتها ابتدا باید تاریخ شمسی را به فرمت استاندارد میلادی تبدیل کنید، در فایل JDF تابعی به نام jalali_to_gregorian وجود دارد، یک مثال:
$jalali_date = '1392/01/01';
list($year, $month, $day) = explode('/', $jalali_date);
$gregorian_date = jalali_to_gregorian($year, $month, $day);
list($year, $month, $day) = $gregorian_date;
echo $year.'-'.$month.'-'.$day;
که خروجی برابر است با
2013-3-21
از این تاریخ باید در روشی که در آموزش گفته شده (با کمک list و تابع mktime) استفاده کنید.
نکته: می توانید برای زمان مقادیر 00:00:00 را در نظر بگیرید.
محمد صادقی
۱۳:۵۷ ۱۳۹۴/۱۲/۱۶
مرسی از جوابتون خیلی بنده را جلو انداختید واقعا شرمنده شما شدم عید تشریف بیارید یزد در خدمتتان باشیم
test
۱۳:۳۹ ۱۳۹۵/۰۲/۱۰
سلام
من میخوام مقدار تاریخ رو (1395/2/11 ) تبدیل به حروف کنم مثلا بگه یازدهم اردیبهشت هزار و سیصد و نود و پنج باید چی کار کنم؟
لطفا به جداول راهنمای لینک زیر مراجعه کنید، با جایگزینی پارامترها در تابع jdate به راحتی می توانید خروجی مورد نظر خود را داشته باشید:
http://jdf.scr.ir/rahnama/?t=jadvalha
نکته: تاریخ را ابتدا به میلادی (مطابق فرمت آموزش) تبدیل و سپس در تابع jdate استفاده کنید.
جمال
۰۰:۲۷ ۱۳۹۵/۰۲/۱۲
سلام
من می خوام خروجی jdf در مورد شماره روزها به صورت عددی باشه در حالی که وقتی از دستور var_dump استفاده می شود به صورت string 4 نمایش داده میشه و اگر از توابع int , intval استفاده می کنم به int ولی با مقدار صفر تبدیل میکنه
برای تبدیل اعداد فارسی به انگلیسی می توانید از تابع زیر استفاده کنید:
function convertFaEn($str) {
$persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
$num = range(0, 9);
$result = str_replace($persian, $num, $str);
return $result;
}
مثال:
$jalali_date = intval(convertFaEn($jalali_date));
var_dump($jalali_date);
احسان
۱۲:۰۴ ۱۳۹۵/۰۳/۰۶
سلام دوست عزیز من از فریم ورک استفاده می کنم اما توی بخش تاریخ به مشکل برخوردم که کدی که شما گفتید رو میزنم اما فیلد خالی بر می گردونه اما وقتی از now استفاده میکنم به میلادی برمیگردونه اگر کمکم کنید ممنون میشم
این آموزش در خصوص نحوه تبدیل تاریخ میلادی به شمسی است نه صرفا نمایش تاریخ میلادی، ضمن اینکه استفاده از فریم ورک به خودی خود مشکلی در خصوص نمایش تاریخ با تابع date نخواهد بود، اگر مشکلتان صرفا استفاده از تابع date است، لطفا در وب در این خصوص جستجو نمائید در غیر اینصورت نیاز به ارائه اطلاعات بیشتری از فریم ورک، نحوه استفاده از کدها و خروجی مورد انتظار است!
احسان
۱۳:۰۴ ۱۳۹۵/۰۳/۱۰
من نمایشش هم میخواستم .
از فریم ورگ runner استفاده میکنم
لطفا به سایت زیر مراجعه کنید، توضیحات کامل و مفصل است:
jdf.scr.ir
مرضیه خانی
۲۱:۰۲ ۱۳۹۵/۰۴/۰۴
سلام میشه راهنمایی کنید چجوری میتونم تاریخ در یک نوشته و یا خبر رو نشون بدم؟ مثل وردپرس که تاریخ درج نوشته ها رو نمایش میده
قاعدتا ابتدا باید در دیتابیس فیلدی برای ذخیره تاریخ و زمان هر مطلب داشته باشید (کار با تابع date در PHP و نوع داده DATETIME در دیتابیس MySQL)، در این صورت برای هر مطلب یک تاریخ و زمان ثبت می شود که می توان به راحتی آن را با دستور SELECT از دیتابیس استخراج و در سایت نمایش داد.
فرمت استاندارد ذخیره تاریخ و زمان در دیتابیس:
9999-12-31 23:59:59
۱۴:۳۸ ۱۳۹۵/۰۴/۲۶
ممکنه بگید چطوری میتونم تاریخ شمسی رو به قمری تبدیل کنم و آن را با تاریخی از آینده با عملگرهای مقایسه ای در شرط هایم مورد سنجش قرار بدهم
تا آنجا که اطلاع داریم کلاسی برای تبدیل مستقیم تاریخ از شمسی به قمری وجود ندارد، لذا ابتدا باید با توجه به این آموزش و تابع jalali_to_gregorian که در فایل jdf.php وجود دارد، تاریخ شمسی را به میلادی تبدیل کنید، یک مثال:
$jalali_date = '1392/01/01';
list($year, $month, $day) = explode('/', $jalali_date);
$gregorian_date = jalali_to_gregorian($year, $month, $day);
list($year, $month, $day) = $gregorian_date;
echo $year.'-'.$month.'-'.$day;
که خروجی برابر است با
2013-3-21
از این تاریخ باید در روشی که در آموزش گفته شده (با کمک list و تابع mktime) استفاده کنید.
نکته: می توانید برای زمان مقادیر 00:00:00 را در نظر بگیرید.
سپس باید کد یا کلاسی برای تبدیل تاریخ از میلادی به قمری پیدا کنید، طبق جستجوی ما برای این مورد چند کلاس در آدرس های زیر ارائه شده (تست نشده!):
http://www.phpclasses.org/package/3223-PHP-Convert-dates-from-the-Julian-to-Arabic-calendar.html

http://www.phpclasses.org/package/3591-PHP-Format-times-and-dates-in-Arabic.html
۰۱:۴۴ ۱۳۹۵/۰۴/۲۸
در به کاربردن تابع قمری دقت کنید. اکثر توابع موجود در نت برای تابع قمری نیاز به اصلاح دارند و معمولاً تاریخ روز جاری رو یک روز قبل یا بعد نمایش میدن.
با سپاس فراوان از یادآوری بجا!
حسین
۱۴:۰۱ ۱۳۹۵/۰۵/۲۸
با سلام
ممنون به خاطر اموزشهای مفیدتون
فقط یه سوال داشتم ؟
چطوری میتونم با این مبدل یک رکورد (مثلا تاریخ عضویت کاربر) مای اسکیول را با تاریخ امروز جمع یا تفریق کنم.
تا بتونم تعداد روزهای عضویت کاربر در سایت را بفهمم.
لطفا یه نمونه کدی در اختیارم قرار بدین
با تشکر
به چندین روش این کار ممکن است، البته اگر تاریخ ذخیره شده به صورت میلادی باشد و با فرض استاندارد بودن فرمت تاریخ و زمان موجود در دیتابیس، می توانید آن را با تابع strtotime به میلی ثانیه تبدیل و این زمان را از زمان مد نظر کم یا با آن جمع کنید، سپس مقدار به دست آمده را با توابع مختلف به صورت روز بدست بیاورید، به فرض:
<?php
$reg_date = '2016-2-12 10:10:10';
$now_date = '2016-8-18 11:11:11';
$diff = strtotime($now_date) - strtotime($reg_date);
echo floor($diff / (60*60*24));
?>
محمد
۱۳:۱۷ ۱۳۹۵/۰۶/۰۵
سلام من یه سیستم ثبت نظر طراحی کردم کامل کار میکنه فقط یه مشکلی که داره تاریخ آخرین نظریو که کاربر ثبت میکنه رو اشتباه نشون میده در صورتی که بقیه تاریخا رو به شمسی درست نشون میده اون آخرین نظریو که وارد میکنم اشتباه نشون میده مثلا وقتی یه نظر دیگه وارد میکنم نظر قبلیه درست میشه و نظر آخری اشتباهه تا وقتی که یه نظر دیگه وارد شه که قبلیه درست میشه ولی باز این نظر آخریه اشتباه نشون میده مشکل از کجاس به نظرتون؟
هرچند بدون دیدن و بررسی سورس کدها و بدون تست و آزمایش و خطا پیدا کردن و رفع مشکل در اینگونه موارد ممکن نیست، اما توجه کنید که پس از ثبت نظر، تاریخ آن در دیتابیس صحیح باشد، اگر تاریخ ثبت شده در دیتابیس صحیح است، پس قسمتی در کدهای شما که وظیفه نمایش تاریخ آخرین نظر را دارد دارای اشکالی است (به طور مثال ممکن است پارامتر مربوط به اختلاف زمانی درست استفاده نشده باشد)!.
ایمان فتاحی
۲۱:۵۹ ۱۳۹۵/۰۹/۱۹
سلام خسته نباشید.
میخواستم تاریخ شمسی رو به unix تبدیل کنم آیا راهی هست برای اینکار؟
مثلا:
1395/01/05 به unix time
بله، با آشنایی با توابع مربوط به تاریخ و استفاده از فایل JDF تقریبا همه کاری می توان کرد! برای هدف مد نظرتان ابتدا باید با تابع jalali_to_gregorian تاریخ را به میلادی تبدیل کنید:
$jalali_date = '1395/01/05';
list($year, $month, $day) = explode('/', $jalali_date);
$gregorian_date = jalali_to_gregorian($year, $month, $day);
list($year, $month, $day) = $gregorian_date;
echo $year.'-'.$month.'-'.$day;
که نتیجه برابر با تاریخ میلادی خواهد بود:
2016-3-24
در نهایت با تابع strtotime می توانید تاریخ بدست آمده را به Unix تبدیل کنید:
$date = $year.'-'.$month.'-'.$day;
echo strtotime($date);
نتیجه معادل مقدار زیر خواهد بود:
1458777600
۱۲:۳۰ ۱۳۹۵/۰۹/۲۲
با سلام
میخواستم بابت مطالب عالیتون دوباره ازتون تشکر کنم .
البته میدونم تشکر جبران این همه زحمات شما نمیشه. ولی خسته نباشید و ممنون بابت سایت خوبتون
مجتبی
۱۳:۲۲ ۱۳۹۵/۱۰/۰۱
سلام ممنون عالی بود
من تونستم زمان و تاریخ رو نمایش بدم
ولی چطوری روز هفته رو هم نمایش بدم؟؟
مثلا اگه شنبه بود بنویسه شنبه اگه دوشنبه بنویسه دوشنبه؟؟؟
لطفا به جدول راهنمای سایت اصلی تابع مراجعه کنید:
http://jdf.scr.ir/rahnama/?t=jadvalha
کافی است کاراکترهای مد نظر در جدول را در هنگام فراخوانی تابع به عنوان آرگیومنت قرار دهید.
احد احسان
۱۷:۳۸ ۱۳۹۶/۰۲/۲۵
با سلام و تشکر از سایت خوب و آموزش های عالیتون.
من میخوام در فرم ثبت نام زمانی که کاربر در کادر مربوط ، تاریخ تولد خودش رو با فرمت 1366/01/01 وارد می کنه در فیلد بعد خود به خود تاریخ تولدش به میلادی با همان فرمت وارد بشه. می خواستم خواهش کنم من رو راهنمایی کنید
انجام این کار نیاز به کدنویسی ترکیبی دارد، در تئوری باید با یک رویداد جاوا اسکریپتی مانند onchange یا onkeyup بررسی کنید اگر فرم تکمیل شده بود، مقدار آن را با Ajax به سرور ارسال و در سرور تاریخ شمسی را با استفاده از این آموزش به میلادی تبدیل و مقدار تبدیل شده را به مرورگر به عنوان پاسخ درخواست ایجکس برگردانید، سپس با جاوا اسکریپت مقدار را تجزیه کرده و به فیلد مقصد نسبت دهید!
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
8 × 6
20 × 20
=
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
سعیدی
سلام می تونید اینو اصلاح کنید؟ چون من با توضیحات شما یاد نگرفتم خیلی ممنون اگه یکبار اصلاح کنید واسه بعد یاد...
۱۴۰۳/۰۲/۲۲

سعیدی
دست شما درد نکنه وقتی اینطوری تغییر میدم و به class می نویسم کار نمی کنه و ارور میده
۱۴۰۳/۰۲/۲۱

سعیدی
دست شما درد نکنه خیلی خوب بود این یکی رو چطوری فراخوانی کنم؟ این واسه مناسبت هاست خیلی ممنون
۱۴۰۳/۰۲/۱۹

سعیدی
با سلام آیا می شه این تابع رو بصورت class نوشت؟ میخوام وقتی کد ملی میدم با این تابع فراخوانی بشه و شهر...
۱۴۰۳/۰۲/۱۹

پرتو
مگه شما دارین اموزشش رو؟ آدرسش رو میزارید؟ یا اگر سایتی رو میشناسید که آموزش داده باشه معرفی کنید ممنون میشم من خیلی گشتم توی...
۱۴۰۳/۰۲/۱۸

پــرتو
سلام خوبید ؟ خسته نباشید گوشی پدرم شیاومی هست ایمیلمو ثبت کردم داخلش بعد می خواستم حذفش کنم نمیشد می گفت همه داده های توی...
۱۴۰۳/۰۲/۱۶

vip
خیلی ممنونم از شما خیلی عالی شد میشه مثل تبلیغ بلاگفا باشه یعنی زیر صفحه نمایش داده بشه و صفحه رو سیاه نکنه که تا...
۱۴۰۳/۰۲/۰۵

vip
با سلام و خسته نباشید استاد چند وقت پیش این کد رو از شما گرفتم این کد خیلی خوبه و کاربر رو هم...
۱۴۰۳/۰۲/۰۴

پـــرتو
سلام خسته نباشید شرمنده مزاحم میشم یه سوال داشتم می خواستم بپرسم که چرا بلاگفا باز نمیشه برام؟ کلا هر وبلاگی که مربوط به بلاگفا...
۱۴۰۳/۰۲/۰۲

هادی عبداله زاده
با تشکر از شما دوست عزیز با order_id درستش کردم موقع برگشت order_id رو بر می گردونه اینطوری کردم که از طریق اون شناسه...
۱۴۰۳/۰۱/۲۲

هادی عبداله زاده
با تشکر از شما برای ارسال درخواست درست بود و به بانک هم وصل شد فقط برای وریفای چیکارش کنم؟
۱۴۰۳/۰۱/۲۲

هادی عبداله زاده
با سلام و خسته نباشید سال نو شما مبارک من یه کد واسه انتقال به درگاه دارم واسه زرین پال هست ...
۱۴۰۳/۰۱/۲۰

پـــرتو
ببخشید ممنون از جوابتون ولی یه سوال اگر بخوام همون شماره رو با حساب کاربری جدید با همون شماره رو داشته باشم داده های قبلی...
۱۴۰۳/۰۱/۱۹

حسین بلاگ
من یه صفحه ارسال متن دارم میخوام کاربرها وقتی واسه م پیام میدن وقتی روی اون دکمه کلیک می کنن بهشون بگه لطفا صبر...
۱۴۰۳/۰۱/۱۹

شریفی
سلام و عرض احترام سال نو رو بهتون تبریک میگم انشالله سال خوبی داشته باشین یه سرویس وبلاگدهی داریم که قصد داریم به...
۱۴۰۳/۰۱/۱۵

فرهادی
سلام ببخشید یه مشکل دارم این صفحه رو نگاه کنید چند بار توی سورس تکرار شده نمی تونم الگوی توضیحاتش رو استخراج...
۱۴۰۳/۰۱/۱۰

فرهادی
با تشکر از شما یه مشکل دیگه برام پیش اومده واسه این کد وقتی echo می گیرم تومان باهاش میاد وقتی میخوام فقط...
۱۴۰۳/۰۱/۰۹

سید صالح
با سلام و خسته نباشید من یک فرم ساده دارم که کاربر باید پر کنه چون سوال امنیتی و اینا نداره ربات ها همه...
۱۴۰۳/۰۱/۰۷

فرهادی
با تشکر از شما یه سوال دیگه هم دارم توی تعدادی از سایتهای فروشگاهی صفحات سایت مپ به جای لینک صفحات حاوی لینکهایی هستند...
۱۴۰۳/۰۱/۰۶

فرهادی
با سلام و درود سال نو رو بهتون تبریک میگم یه سوال من میخوام لینکهای داخل صفحه sitemap.xml سایتها رو دربیارم کدش رو هم...
۱۴۰۳/۰۱/۰۲
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.