شنبه ۲۲ شهریور ۱۴۰۴

Saturday, September 13, 2025 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 مطالب بیشتر:
ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس
محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess
نمایش قسمتی از متن و پاراگراف با PHP
آموزش ساخت نقشه XML سایت (Sitemap) با PHP و MySQL
دیدگاه
more ۹۶ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
جوادی
۱۵:۴۳ ۱۳۹۳/۰۳/۱۴
سلام، در مورد زمان یا همون (ساعت) که از سمت سرور خونده میشه... ساعت رو بصورت (ثابت) نشون میده.
میشه بهش گفت (ساعت ورود کاربر) به صفحه و کاربر باید با هر بار رفرش صفحه، زمان و ساعت جدید رو ببینه...
ایا این امکان وجود ندارد که ساعت رو بصورت فعال نشون بده... یعنی ثانیه های زنده ! ایا راهکاری در این مورد وجود دارد که ساعت رو از سمت سرور فعال نشون بدیم؟؟؟ با تشکر فراوان
راهکار استفاده ترکیبی از PHP و JavaScript است که آموزش آن در مطلبی جداگانه در سایت وجود دارد، لطفا عبارت "تاریخ زمان" را در قسمت جستجو وارد کنید، در پیش نمایش آموزشی با عنوان "کار با تاریخ و زمان در جاوا اسکریپت (JavaScript)" دقیقا همین حالت استفاده شده.
۱۸:۰۳ ۱۳۹۲/۱۱/۰۴
سلام من از این کد به صورت تابع زیر استفاده کردم ولی فقط تاریخ روز یعنی امروز رو بر می گردونه اگه میشه بگید اشکال کار کجاست ؟ البته اینم بگم وقتی که به همون شکلی که شما گفتی استفاده می کردم ساعت رو به ساعت لحظه نشون می داد ولی تاریخ به درستی تبدیل می شد
function date_convert()
{
$Date = '2014-01-01';
list($year, $month, $day) = explode('-', $Date);
$timestamp = mktime( $month, $day, $year);
$jalali_date = jdate("تاریخ : Y/m/d",$timestamp);
return $jalali_date;
}
برای سه آرگیومنت اول تابع mktime مقادیر 00 00 12 قرار دهید!
در واقع سه آرگیومنت اول تابع برای زمان و سه آرگیومنت بعدی برای تاریخ هستند.
موسی
۱۷:۵۲ ۱۳۹۲/۱۰/۲۸
سلام و خسته نباشید
بسیار بسیار متشکرم از همگی و آرزوی موفقیت برای شما
۱۹:۴۵ ۱۳۹۲/۱۰/۱۱
سلام بخاطر زحماتتون خیلی ممنون!
برای اضافه شدن به ثانیه و به روز شدن زمان و تاریخ؛ راه حلش چیه؟؟ مرسی مهندس
هر چند سوالتان دقیق نیست، اما به نظر باید از نمایش تاریخ و زمان با جاوا اسکریپت استفاده کنید (که آموزش آن در سایت و در وب وجود دارد).
۱۲:۳۵ ۱۳۹۲/۱۰/۰۵
با سلام و عرض ادب
آموزش خیلی خوبی بود. استفاده کردیم.
با سپاس فراوان
نیما
۰۴:۲۰ ۱۳۹۲/۰۹/۱۵
ممنون از سایت وبگو قسمت آرایه مشکلم حل شد الان 4 و نیم صبحه تونستم کارم رو راه بندازم ، ممممممنون
نیما
۰۴:۱۴ ۱۳۹۲/۰۹/۱۵
ممنون بابت پاسختون ، یه سوال داشتم و اون اینکه من تو دیتابیس یه تاریخ ذخیره کردم 2013,12,5
چطور میتونم اینو آرایه کنم؟ مثلا 0 2013 بشه 1 ماه و 2 هم روز.
علی
۱۹:۳۰ ۱۳۹۲/۰۹/۰۲
من یک سایت وردپرس دارم و یک قالب دقیقا باید چیکار کنم برای اینکه تاریخ شمسی بشه ببخشیدا من زیاد متوجه نشدم
لطفا به انجمن های پشتیبانی وردپرس مراجعه نمائید.
حبیب ایرانی
۰۰:۵۷ ۱۳۹۲/۰۸/۱۷
سلام ، چطور میشه دو تا تاریخ رو با هم مقایسه کرد (تاریخ شمسی) مثلا در قسمت ثبت نام کاربر بعد از یک سال اکانتش غیر فعال بشه ، دوم اینکه چطور بتونیم یه تاریخ رو یه سال یا چند ماه به جلو تغییر بدیم اینم برای تمدید اکانت کاربر
کار با تاریخ و زمان نیاز به مطالعه دقیق آموزش حاضر + آشنایی با مبحث آرایه ها و توابع دارد، اگر تاریخ موجود شمسی است، مرحله زیر را اجرا کنید:
- برای استفاده از محاسبات مربوط به تاریخ و زمان، باید ابتدا آنها را به میلادی تبدیل نمائید، برای این کار در فایل 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
از این تاریخ باید در روشی که در ادامه گفته می شود استفاده کنید.
- تاریخ مورد نظر را که از دیتابیس یا مفسر PHP استخراج کرده اید، به یک متغیر نسبت دهید:
$datetime = '2013-01-18 20:00:29';
سپس از فاصله خالی بین تاریخ و زمان استفاده کرده و با تابع explode آنها را به آرایه با دو کلید و مقدار تبدیل کنید:
$split_date_time = explode(' ', $datetime);
اگر با print_r از متغیر split_date_time خروجی بگیرید خواهید داشت:
Array
(
[0] => 2013-01-18
[1] => 20:00:29
)
اکنون از دو کلید و مقدار آنها می توانید استفاده کنید:
list($year, $month, $day) = explode('-', $split_date_time[0]);
list($hour, $minute, $second) = explode(':', $split_date_time[1]);
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
در این حالت خروجی برابر یک عدد صحیح است که امکان مقایسه با عدد صحیح دیگر فراهم می شود.
- برای افزودن یا کاهش زمان به تاریخ، باید ابتدا فرمت به صورت نمونه زیر باشد:
1999-12-20 24:30:60
در این حالت تابع date و time قابل استفاده هستند، مثال:
$now_date = date("Y-m-d H:i:s", time() + ($timezone + 259200));
که عدد 259200 ثانیه برابر 3 روز (3 * 60 * 60 * 24) است.
نکته: برای مقداردهی به تابع date، در صورتی که تاریخ در دیتابیس باشد (تاریخ فعلی نباشد) باید از mktime استفاده کرده و پارامتر timestamp را برای تابع date ست کنید، مثال:
list($year, $month, $day) = explode('-', $split_date_time[0]);
list($hour, $minute, $second) = explode(':', $split_date_time[1]);
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
$now_date = date("Y-m-d H:i:s", $timestamp);
saed
۲۱:۴۲ ۱۳۹۲/۰۸/۱۰
با سلام
یک مشکل برای من در جوملا پیش اومده
اینکه سیستم تاریخ شمسی در جوملا من مشکلی داره ولی من با کامپوننت جوم شاپ جوملا دارم کار می کنم که وقتی محصولی ثبت و یا سفارش داده میشه زمان ثبت یک ساعت جلوتر از ساعت رسمی ما هست که انگار ساعت جدید هست این کد در ثبت تاریخ کامپونت هست
echo jhtml::_ ('date', $row->order_m_date,"Y-m-d H:i:s");
این کد یک ساعت زمان را جلو تر ثبت میکنه نمی دونم چطوری میشه jdf را در اینجای گذاری کنم من این کد را وارد کردم ولی زمان ثبت نمیشه و هی زمان تغییر میکنه
include_once('jdf.php');
echo jhtml::_ ('date', $row->order_m_date,jdate("Y-m-d H:i:s"));
میشه کاری کرد که اختلاف یک ساعت را کم کرد من کد زیر را قرار دادم ولی ارور میده
echo jhtml::_ ('date', $row->order_m_date "Y-m-d H:i:s", time() + ($timezone -3600));
ممنون میشم راهنمای کامل همراه با کد آن قرار دهید
این مشکل را باید از طریق انجمن های جوملا پیگیری و حل کنید، به نظر کلاسی که تاریخ از طریق آن محاسبه و در دیتابیس ذخیره می شود در جای دیگری است!، تکه کدی که قرار داده اید صرفا یک متد را فراخوانی می کند و قسمت Y-m-d H:i:s در واقع تاریخ حقیقی نیست، بلکه صرفا فرمت تاریخ را برای یک تابع دیگر مشخص می کند.
نفس
۲۰:۴۰ ۱۳۹۲/۰۸/۰۳
سلام.من نظرات دوستان رو هم مطالعه کردم اما 1سوال بی جواب دارم. تو خیلی از سایتها دیدم ثانیه شمار هم همزمان درحال تغییر هست. این کد فقط با رفرش کردن صفحه عوض میشه. نمیشه کاری کرد زمان بصورت لحظه ای تغییر کنه؟
برای این کار از نمونه کد زیر (ترکیب JavaScript و PHP) می توانید استفاده کنید:
<script type="text/javascript">
<!--
//تنظیم زمان بر اساس تاریخ سرور
var date = new Date(<?php echo date('y, n, j, G, i, s', time() + 12600); ?>);
//استخراج ساعت، دقیقه و ثانیه
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
//تابع برای محاسبه و نمایش زمان
function ShowTime(){
second++;
if(second.toString().length == 1){
second = '0' + second;
}
if(second>59){
second = '0' + 0;
minute++;
}
if(minute.toString().length == 1){
minute = '0' + minute;
}
if(minute>59){
minute = '0' + 0;
hour++;
}
if(hour.toString().length == 1){
hour = '0' + hour;
}
if(hour>23){
hour = '0' + 0;
}
//خروجی
var output = hour + ":" + minute + ":" + second;
//چاپ خروجی در بلاک
document.getElementById("show_time").innerHTML = output;
}
//اجرای تابع در هنگام بارگذاری صفحه
window.onload = function(){
//فراخوانی تابع اصلی در بار اول
ShowTime();

//فراخوانی تابع اصلی پس از هر ثانیه
setInterval("ShowTime();", 1000);
}
-->

</script>
<!-- بلاک خروجی -->
<div id="show_time"></div>
اتفاقی که در این کد می افتد این است که ابتدا به Date مقادیر پیش فرض می دهیم که همان مقادیر زمان سرور است که با تابع date در PHP استخراج کرده ایم، سپس موارد مورد نیاز (ساعت، دقیقه و ثانیه) را بر اساس آن تعریف می کنیم، تابع showtime در هر بار اجرا محاسبات را انجام می دهد و خروجی را به بلاک div می فرستد، تابع setInterval هم باعث می شود تا در هر ثانیه، به صورت خودکار تابع showtime فراخوانی شود.
پرویز
۲۰:۱۵ ۱۳۹۲/۰۷/۳۰
من می خواهم یک سایت پویا طراحی کنم و نمی خواهم از CMS های رایگان استفاده کنم و می خواهم به صورت قدم به قدم آن را طراحی کنم. و از شما می خواهم مراحل یادگیری و ایجاد سایت پویا را بگویید.
طراحی سایت داینامیک یعنی داشتن دانش و تجربه ایجاد سیستمی که بتوان با آن بخش های مختلف یک وبسایت را مدیریت کرد، لذا فرآیند یادگیری آن می تواند از اصول مقدماتی وب تا برنامه نویسی پیشرفته سمت سرور (به فرض PHP یا ASP) را شامل شود، به طور خلاصه:
- آشنایی با اصول و مبانی وب.
- تسلط نسبی بر HTML و CSS.
- آشنایی با جاوا اسکریپت و فریم ورک های آن (مانند جی کئوری).
- تسلط بر یک زبان سمت سرور (معمولا PHP یا ASP).
- کار با پایگاه داده.
- آشنایی با حفظ امنیت دیتابیس و شیوه های نفوذ در وب.
- بررسی چند CMS رایگان جهت آشنایی با نحوه طراحی ساختار سیستم و گرفتن ایده.
lrp
۲۰:۱۴ ۱۳۹۲/۰۵/۰۸
بینهایت ممنونم از راهنماییتون درست شد
lrp
۰۱:۲۵ ۱۳۹۲/۰۵/۰۷
منظورتون اینه که تابع date و به صورت :
$date=date("y,m,d");
هست یا نه طور دیگه با insert کردن آشنایی دارم ولی تابعی که زمان و وارد دیتابیس بکنه نه نمیدونم. اگه میشه تابع date و بهم بگید و اینکه فیلدم توی دیتابیس TIMESTAMP باشه یا DATETIME؟
بله، از تابع date استفاده کنید، با پارامترهای این تابع هر نوع تاریخ و زمانی قابل ایجاد است (به صورت استاندارد Y-m-d H:i:s)، در دیتابیس نیز بهتر است در موارد عمومی از نوع DATETIME استفاده کنید، البته TIMESTAMP کاربردهای خاص خود را دارد.
lrp
۰۴:۴۷ ۱۳۹۲/۰۵/۰۴
ببخشید من می خوام که هر کاربری که می خواد نظر بده همراه نظر تاریخش توی دیتابیسم ذخیره بشه و زمانی که می خوام نمایش بدم نظرات و تاریخ و ساعت و نمایش بده چطور می تونم تاریخ و وارد دیتابیسم کنم؟ ممنون میشم راهنماییم کنید
در درجه اول باید با نحوه INSERT کردن اطلاعات از طریق PHP در MySQL آشنا باشید (آموزش های مقدماتی)، سپس به راحتی می توانید از تابع date و این آموزش استفاده کرده و با فرمت دلخواه، تاریخ و زمان را به متغیرهایی نسبت داده، مقادیر متغیر را در پرس و جوی دیتابیس جایگزین کنید تا در جداول به همراه سایر اطلاعات ذخیره شوند.
نکته: مطالعه بخش نظرات این مطلب نیز خالی از لطف نخواهد بود.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
3 × 5
20 × 20
=