یکی از دردسرهای همیشگی مدیران وبلاگ ها و سایت های فارسی زبان، مشکل نمایش تاریخ شمسی در صفحاتشان است، البته این مشکل برای سایت ها نمود بیشتری دارد چرا که وبلاگ ها معمولا از طریق سرویس دهنده خود می توانند تاریخ مطالب و محتوا را به بازدیدکنندگان به راحتی نشان دهند، اما در سایت ها وضع کمی فرق می کند، چرا که تاریخ قریب به اتفاق سرورها به میلادی است و از طرفی منطقه زمانی نیز در بیشتر سرورها بر روی GMT قرار دارد، در حالی که کشور ما ایران، به صورت استاندارد در منطقه زمانی 3:30+ GMT (و با تغییر ساعت در منطقه زمانی 4:30+ GMT) قرار گرفته است؛ در این مطلب می خواهیم به کمک برنامه مبدّل تاریخ هجری شمسی (jdf) که توسط برنامه نویسان ایرانی و به PHP نوشته و توسعه داده شده است، روش تبدیل تاریخ میلادی به شمسی را آموزش دهیم و مشکل منطقه زمانی را نیز حل کنیم.
دانلود مبدل تاریخ میلادی به شمسی به زبان php
قبل از بررسی ادامه آموزش، ابتدا آخرین نسخه برنامه مبدّل تاریخ هجری شمسی (jdf) را از سایت http://jdf.scr.ir دانلود کنید:
راستی هر زمان نتونستید از لینک بالا بگیرید اگر بگردید تو اینترنت پیداش می کنید
دانلود برنامه مبدّل تاریخ هجری شمسی (jdf)
تبدیل تاریخ استاتیک میلادی به شمسی
پس از دریافت فایل بالا، ابتدا تاریخ و زمان میلادی را به صورت Timestamp استاندارد (روز-ماه-سال) و (ثانیه-دقیقه-ساعت) از دیتابیس یا از سرور دریافت می کنیم، سپس پس از تجزیه موارد اضافه از طریق تابع explode در php و نهایتا تبدیل آرایه ها به متغیر با کمک list، با تابع mktime، تاریخ و زمان را به صورت Unix در می آوریم؛ سپس تاریخ را به تابع jdate می دهیم و تبدیل شده شمسی آن را دریافت می کنیم؛ مثال زیر روشن است:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>وبگو | تبدیل تاریخ میلادی به شمسی</title>
<!– http://webgoo.ir –>
<style type=”text/css”>
body{
font-family:Tahoma, Geneva, sans-serif;
font-size:12px;
}
</style>
</head>
<body>
<?php
$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);
include (‘jdf.php’);
$jalali_date = jdate(“زمان: H:i:s – تاریخ: Y/m/d”,$timestamp);
echo $jalali_date;
?>
<hr />
خروجی به صورت تاریخ و زمان نشان داده می شود
</body>
</html>
توضیح:
– چنانچه خطای Fatal error: Call to undefined function: date_default_timezone_set() on line 12 را دریافت کردید، خط مربوط به date_default_timezone_set را در لاین 12 حذف کنید یا به صورت کامنت در آورید (با افزودن // در ابتدای آن)، نمایش خطا به این دلیل است که قابلیت date_default_timezone_set تنها برای نسخه 5.1.0 به بعد در php قابل دسترس است.
– در کد بالا ما تاریخ را در متغیر now و زمان را در متغیر time داریم و اختلاف از GMT را برابر صفر قرار داده ایم (اگر زمان سرور شما بر روی GMT تنظیم شده است باید برای اختلاف 3:30 عدد 12600 و برای 4:30 عدد 16200 را قرار دهید).
– هر ساعت اختلاف از GMT برابر است با 60 دقیقه ضرب در 60 ثانیه (60*60) و نتیجه برابر است با 3600 ثانیه (یک ساعت برابر 3600 ثانیه)؛ 3:30 برابر می شود با 12600 و 4:30 برابر است با 16200 ثانیه.
– list، آرایه های حاصل از تجزیه با تابع explode را در مقادیر متغیرها ذخیره می کند.
– تابع jdate یکی از توابع مفید و اصلی فایل jdf.php است که تاریخ میلادی را به شمسی تبدیل می کند.
– نهایتا نیز متغیر jalali_date را به خروجی می دهیم.
تبدیل کردن میلادی به شمسی تاریخ های محبوب تان به کمک سامانه هایی مثل یار خیلی راحت شده و در کمتر از چند ثانیه قابل تبدیله