مبدل JDF چیست؟
آیا برای نمایش تاریخ هجری شمسی، JDF تنها راه حل است؟!
دانلود JDF، مبدل تاریخ میلادی، شمسی به زبان PHP
نحوه استفاده از فایل jdf.php در برنامه ها
تبدیل تاریخ میلادی به شمسی با تابع jdate
تبدیل تاریخ میلادی به شمسی با تابع gregorian_to_jalali
تبدیل تاریخ شمسی به میلادی با تابع jalali_to_gregorian
مثال و پیش نمایش آنلاین
تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP

یکی از موارد پرکاربرد در طراحی و برنامه نویسی سایت ها و صفحات فارسی زبان نمایش تاریخ هجری شمسی به اشکال مختلف است، برنامه نویسان وب معمولا برای سازگاری و ایجاد قابلیت های چندگانه در برنامه هایشان به صورت پیش فرض در ساختار، سورس کدها و فیلدهای دیتابیس از تاریخ میلادی استفاده می کنند که جنبه درون برنامه ای دارد و به صورت ذاتی با توابع یا امکانات سرور و پایگاه داده سازگار است، اما اگر بخواهیم این فرمت های پیش فرض را به صورت محلی و به زبان کاربر نمایش دهیم قاعدتا باید آنها را بر اساس فرمول و قاعده خاص گاهشماری مقصد تبدیل کنیم، بر همین اساس یکی از رایج ترین این موارد تبدیل تاریخ میلادی به هجری شمسی در 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
ارسال پارامتر به URL و دریافت مقادیر با PHP
نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
ساخت منوی هوشمند با PHP و CSS
آموزش ساخت نقشه XML سایت (Sitemap) با PHP و MySQL


ممنونم از راهنماییتون. مشکلم اینجاست که نمیدونم تاریخ روز رو بصورت اتومات چجوری بدست بیارم. کدهای موجود برای بدست آوردن تاریخ یکسری کدجاوا اسکریپت هستند که نمیتوان دورن متغیر ریخت و با زمان موجود در دیتابیس مقایسه کرد. کمکم کنید
من یکسری اطلاعات فروش در دیتابیس خود وارد کردم و میخام که اطلاعات فروش رو بر اساس تاریخ نمایش بدم. مثلا فروش امروز و فروش هفتگی رو نمایش بدم . در دیتابیس تاریخ فروش هست ولی زمان بازیابی نمیدونم این تاریخ رو با چه تاریخی مقایسه کنم و نشون بدم
$today = '2015-10-09';
$week = '2015-10-02';
SELECT * FROM tbl WHERE col_date < $today AND col_date > $week;
و یا:$today = '2015-10-09';
$week = '2015-10-02';
SELECT * FROM tbl WHERE col_date BETWEEN $week AND $today;
همچنین می توانید از توابع درونی MySQL استفاده کنید، مثال:SELECT * FROM tbl WHERE DATE(col_date) = DATE(NOW());
نکته: Data Type ستون تاریخ باید به صورت DATETIME باشد!ممنون میشم کمکم کنید
<?php
$now = time();
$your_date = strtotime("2015-01-01");
$date_diff = $now - $your_date;
echo floor($date_diff/(60*60*24));
?>
$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 را در نظر بگیرید.
1- خودتون در این سایت تاریخ ها رو به میلادی در db ذخیره کردین یا به شمسی ؟
2- اگر به میلادی ذخیره کنیم و بخواهیم در چندین صفحه از این تابع تبدیل استفاده کنیم مشکلی برای حافظه سرور پیش نمیاد؟
مثلا در همین سایت شما در زیر هر پست صدها کامنت دارین که هر کدام تاریخ و ساعت دارند که هر کدام میبایست به شمسی تبدیل شوند و چاپ شوند.
3- زمان و تاریخ هایی که در db ذخیره کرده ایم را نمیشه sort کرد؟
4- در آخر اینکه میخوام بدونم مثلا برای سروری که رم آن 128 باشه تا چه حد استفاده از اسکریپت و پردازش کدهای php مجازه که سرور crash نشه و سبک کار کنه؟
ممنون از راهنماییتون.
2- در کل این موارد تاثیر چندانی بر روی توان سرور ندارند و به سرعت توسط مفسر PHP پردازش می شوند (البته در حجم کاربران خیلی انبوه و بسته به توان سرور بی تاثیر هم نیستند)، نکته دیگر مدیریت میزان حجم اطلاعاتی است که پردازش می شوند، اگر توجه کنید در هر بارگذاری صفحات سایت، تنها تعداد محدودی از نظرات کاربران قرار می گیرد و با صفحه بندی این مقدار کنترل می شود.
3- قاعدتا اگر جداول شما از نوع utf8-persian-ci باشند، چنین امکانی فراهم است (تست نشده!).
4- تا حدی که بارگذاری صفحات شما غیر طبیعی نباشد! البته برای سنجش دقیق این موضوع روش هایی وجود دارد که می توان میزان زمان بین شروع پردازش کدها و خاتمه را محاسبه کرد (لطفا در وب جستجو کنید)، اگر این زمان زیر یک ثانیه باشد، ایدآل است، بین یک تا سه ثانیه یعنی قدرت سرور مناسب نیست یا جوابگوی ترافیک فعلی نیست اما همچنان قابل استفاده است، بالاتر از سه ثانیه مشکلی جدی (در نوشتن بهینه برنامه یا ضعف سخت افزاری) وجود دارد.
نکته 1: زمان های گفته شده تجربی هستند، معیار دقیقی در این رابطه وجود ندارد!
نکته 2: زمان پردازش کدها ممکن است با زمانی که صفحات از سرور به مرورگر شما منتقل می شوند تفاوت کند، گاهی مشکلات اینترنت می تواند بارگذاری یک صفحه را کند جلوه دهد، آنچه مهم است زمان پردازش کدها در سرور است.
در مراحل طراحی سایت به یک مشکل برخوردم
من یک تاریخ شروع از کاربر میگیرم با date picker که فارسی شده و در db ذخیره میکنم. در مرحله بعد با توجه به دیگر متغیرها با استفاده از تابع date تا 30 سال از تاریخ شروع این زمان تغییر میکنه مثلا بهش ماه یا سال اضافه میشه . مشکلی نیست تا وقتی که به 30ام یا 31ام برمیخورم دیگه date درست جواب نمیده و تاریخ خروجی بهم میریزه البته در بعضی ماههای سال.
با دیدن توضیحات دوستان متوجه شدم باید تاریخ رو میلادی ذخیره میکردم. ایا همین کار به تنهایی کافیه؟
با googling به این نتیجه رسیدم که خود تابع date با 31ام مشکل داره یعنی حتی اگه تاریخ رو هم میلادی کنم مشکلم حل نمیشه. ایا برداشتم درسته؟ به هر حال راه حل چیه؟ سپاس فراوان بابت توضیحات خوبتون
در کل توصیه می شود تاریخ در حالت نمایشی به صورت فارسی (یا در صورت لزوم میلادی) باشد و در دیتابیس حتما میلادی و با فرمتی استاندارد ذخیره شود.
برای بخش آرشیو سایت میخوام بین ناریخ ها سرچ بزارم. مثلا تاریخ 1393/02/24 چه طور از دیتابیس سرچ کنم. درحالی که به صورت 1418559621 در دیتابیس ذخیره شده. ممنون
$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
سپس باید این تاریخ را به صورت Unix دربیاورید که در اینجا تابع strtotime کاربرد دارد:strtotime('2013-3-21');
در نهایت باید این تاریخ را در پرس و جوی خود به یکی از روش های زیر استفاده کرد:- در قسمت WHERE از علامت >< استفاده کرد، یعنی:
SELECT FROM tbl WHERE date_col < $date_1 AND date_col > $date_2
یاSELECT FROM tbl WHERE date_col BETWEEN ($date_1 AND $date_2)
اگر در تاریخ مورد نظرمون بخواهیم اعداد فارسی رو به اعداد انگلیسی نشون بدیم چه کدی باید اضاف کنیم؟ مثلا سال 1393 رو به عدد فارسی نشون میده مخوام به انگلیسی نشون بده. لطفا راهنمایی کنید
$jalali_date = jdate("زمان: H:i:s - تاریخ: Y/m/d", $timestamp, NULL, NULL, 'en');
فقط چون این تابع در لوکال هاست شناسایی نمیشه فکر کردم یک فانکشن هست که پاک شده یا معیوب شده
در بخشی از اسکریپت چتروم timestamp رو با
now()
محاسبه و به جدولی از نوع timestamp ارسال کرده اندبه این صورت:
UPDATE db1_etchat_user SET etchat_reg_timestamp=now()
ایا now()
یک فانکشن است که در بخشی دیگر از کدها تعریف شده باشد یا تابعی برای گرفتن زمان و تاریخ بصورت timestamp است؟چون من فانکشنی با نام now در کدها پیدا نکردم
با تشکر
NOW()
یک تابع درونی MySQL است که تاریخ و زمان را با نمونه فرمت زیر خروجی می دهد:1999-12-30 12:00:00
در کنار این تابع، CURDATE()
فقط تاریخ وCURTIME()
فقط زمان را خروجی می دهد.اما من خب برای مثال میخوام خبر جدیدی رو از مدیریت سایت ارسال کنم تاریخ رو که به جای مثلا این
2014-07-03 02:04:07
ارسال کنه ، اینطوری ارسال میکنه 0000-00-00 00:00:00
خب اینطوری هم وقتی میخوام خبر رو نگاه کنم میبینم تاریخ اینطوری ثبت شده زمان: ۰۳:۳۰:۰۰ - تاریخ: ۱۳۷۸/۰۹/۰۹همه ی خبرا اینطوری میشه؟ میخواستم بدونم مگه نباید هنگام درج اطلاعات در دیتابیس مثل عنوان و متن، تاریخ همون لحظه هم بصورت میلادی تو فیلد date قرار بگیره؟ پس چرا 000000000 ارسال میکنه؟کوئری منم اینه
$time = time();
$result = mysql_query("INSERT INTO `news` VALUES(NULL,'$title','$body','$file','$sex','$time')
$now = date("Y-m-d H:i:s", time() + $timezone);
به نظر آشنایی شما با بحث تاریخ و زمان در PHP خیلی زیاد نیست.http://php.net/manual/en/function.date.php
اما خب من جدول تاریخ دیتابیس رو از varchar به timestamp تغییر دادم فکر میکنم بایدم این کار رو میکردم... حالا من از طریق کوئری زیر وقتی مطلب جدید ارسال میکنم تاریخ رو بصورت
0000-00-00 00:00:0
ارسال میکنه. اما خب وقتی از دیتابیس مطلب جدید ثبت میکنم زمان درست رو وارد میکنه... میخوام بدونم مشکل از کوئری منه. یا باید توی صفحه ارسال مطلبم فیلد جدیدی درست کنم و تاریخ میلادی رو دریافت کنم و تو دیتابیس insert کنم ؟function submitNews ($title,$body,$file)
{
$time = time();
$result = mysql_query("INSERT INTO `news` VALUES(NULL,'$title','$body','$file','$time')
");
return $result;
}
اما نوع timestamp برای هدف شما مناسب نیست (مگر اینکه خودتان کار با آن را بلد باشید)، برای تاریخ و زمان با فرمتی که آموزش داده شده باید از نوع DATETIME در دیتابیس استفاده کنید. تمام کاری که باید بکنید ذخیره با فرمت مذکور و سپس تجزیه به تاریخ و زمان، مطابق نمونه کدها است.
سوالی تو ذهنم هست که واقعا درگیرم
میخوام بدونم اگه بخوام زمان و تاریخ یک زمان خاص رو بزنم بایستی چیکار کنم. خب الان این توابع برای زمان حال هست به طور مثال من یه خبری رو دو هفته پیش ارسال کردم به سایت میخوام زمان و تاریخ اون لحظه ثبت بشه. الان من همین توابع و سایر توابع رو میرنم متاسفانه با رفرش صفحه زمان هم بروز میشه؟؟؟
توی دیتابیش من تاریخ رو با varchar ثبت کردم
و هنگام ارسال یه خبر از این تابع استفاده میکنم
function submitNews ($title,$sex,$body,$file)
{
$time = time();
$result = mysql_query("INSERT INTO `news` VALUES(NULL,'$title','$body','$file','$sex','$time')
");
return $result;
}
دریافت تاریخ رو هم چون مطالبم داخل حلقه هست داخل حلقه گذاشتم و همونطوری که شما آموزش دادید؟؟ ممنون میشم راهنمایی کنید!!<?php
$query = mysql_query("SELECT * FROM {$statement} LIMIT {$startpoint} , {$limit}");
while($row = mysql_fetch_assoc($query))
{
$timezone = 0;//برای 3:30 عدد 12600 و برای 4:30 عدد 16200 را تنظیم کنید
$now = date("Y-m-d", time()+$timezone);
$time = date("H:i:s", time()+$timezone);
list($year, $month, $day) = explode('-', $now);
list($hour, $minute, $second) = explode(':', $time);
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
$jalali_date = jdate("زمان: H:i:s - تاریخ: Y/m/d",$timestamp);
?>
<td class="organisationname"><?php echo $jalali_date?></td>
<?php
}
echo pagination($statement,$limit,$page);
?>
1999-12-30 12:59:00
استفاده کند، برای این کار نیاز است که ابتدا مقادیر در حلقه while و با استفاده از توابعی مانند mysql_fetch_assoc دریافت و سپس از اطلاعات موجود در ردیف ها استفاده شود (شما بخشی از کار را انجام داده اید، اما در حلقه از اطلاعات ردیف ها استفاده نکرده اید، در این رابطه به آموزش های مقدماتی MySQL مراجعه کنید)، مثال:<?php
while($row = mysql_fetch_assoc($query)){
//1999-12-30 12:59:00 در ستون date_time
$date_time = explode(" ", $row['date_time']);
$date = $date_time[0]; //1999-12-30
$time = $date_time[1]; //12:59:00
list($year, $month, $day) = explode('-', $date);
list($hour, $minute, $second) = explode(':', $time);
$timestamp = mktime($hour, $minute, $second, $month, $day, $year);
$jalali_date = jdate("زمان: H:i:s - تاریخ: Y/m/d", $timestamp);
}
?>
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.