Boplo.ir
rss

من در Facebook


جستجو


آخرین مطالب

مطالب همینجوری

بر و بچ

MyView TakhteShasi Tween

دوستشون دارم

بیلبورد

دامین برای فروش: CleanCode.ir
FastFeed.ir
Fonvi.com

تماس


انواع و اقسام سفارشات طراحی و برنامه نویسی سایت پذیرفته میشه. از سایت حمایت از خرگوشهای صورتی گرفته تا سایت قاچاق اعضای بدن!
تماس

 

از بيماران سرطاني حمايت كنيم

A new begining
AHHP presents

 

آدرس کوتاه: http://Boplo.ir/:43

مبدل شمسی توابع زمان در PHP
۷ آبان ۱۳۸۹ ساعت ۰۳:۰۴

پی اچ پی
YADC) Yet Another Date Converter)

من دو سال پیش تابع ()date در PHP رو به شکل یک کلاس شمسی کردم و در این سایت قرار دادم. یه سری داونلود کردند و احتمالا استفاده کردند. حالا نسخه جدید این کلاس رو با امکانات بیشتر می تونید دریافت کنید یا نمونه قدیمی خودتون رو بروز کنید. تغییرات در نسخه 2.0.0 به شکل زیر هستند:

  • اضافه شدن متد جدید برای شبیه سازی تابع ()mktime
  • اضافه شدن متد جدید برای شبیه سازی تابع ()getdate
  • رفع باگ
  • اضافه شدن امکان نمایش اعداد بصورت فارسی
نکته مهم اینکه نام کلاس و نام متد date تغییر کرده ولی این کلاس با نمونه های قبلی هم سازگاره یعنی اگر قصد بروزرسانی کلاس رو داری لازم نیست بری هرجا کلاس رو استفاده کردی، تغییر بدی. کافیه کلاس جدید رو با نمونه قبلی تعویض کنی.

معرفی کلاس
Properties (مشخصه ها)
نامتوضیج
jformat$ آرایه انجمنی حاوی کلیه کاراکترهای معتبر برای تابع date ولی با مقدار شمسی و فارسی
format$ مانند jformat$ ولی برای تاریخ میلادی
farsiDigits$ مقدار ‌Boolean برای تعیین اینکه اعداد، فارسی نمایش داده شوند یا خیر. مقدار پیشفرض: TRUE

 

Methods (متدها)
نامتوضیجپارامترهامقدار بازگشتی
date شبیه ساز تابع ()date برای تاریخ شمسی
  • format$ : فرمت معتبر تابع ()date
  • stamp$ : برچسب زمان UNIX - اختیاری
  • GMT$ : اختلاف ساعت جهانی به ثانیه (ایران=12600) - اختیاری
فرمت ترجمه شده بصورت string
mktime شبیه‌ساز تابع ()mktime برای ایجاد timestamp ولی با ورودی‌های شمسی.
  • hour$ : ساعت
  • minute$ : دقیقه
  • second$ : ثانیه
  • month$ :ماه شمسی
  • day$ : روز شمسی
  • year$ : سال شمسی
Timestamp یونیکس
getdate شبیه‌ساز شمسی تابع ()getdate با خروجی شمسی
  • Timestamp : $timestamp یونیکس
آرایه مطابق با تابع ()getdate

نمونه استفاده:

include_once "jcalendar.class.php";
$calendar = new jCalendar;
echo $calendar->date("H:i Y/m/d");
$timestamp = $calendar->mktime(19, 45, null, 7, 23, 1366);
echo $calendar->getdate($timestamp);
echo $calendar->date("H:i Y/m/d", $timestamp);

 

علت اصلی اینکه این مبدل بصورت کلاس ایجاد شده و نه بصورت یک تابع، این بوده که مشخصه های format$ و jformat$ حاوی تمامی کاراکترهای معتبر تابع ()date هستند و از طریق کلاس امکان دسترسی به همه اونها بدون فراخوانی خود تابع ()date یا متد ()jdate هست.
کافیه یکبار متد jdate با هر فرمت ورودی فراخوانی بشه تا این مشخصه ها مقدار بگیرن. نمونه:

include_once "jcalendar.class.php";
$calendar = new jCalendar;
echo $cal->date("H:i Y/m/d");
echo $cal->jformat['Z'];
echo $cal->format['U'];

 

 

کاراکترهای معتبر تابع ()date
کاراکترتوضیجنمونه
dروز از ماه بصورت دو رقمیعددی بین 01 تا 31
Dنام روز در هفته، فقط حرف اولپ (=پنجشنبه)
jروز از ماه. تک رقمی برای اعداد تک رقمیعددی بین 1 تا 31
lنام روز در هفتهشنبه
Nشماره روز در هفته، از 1 تا 71 (=شنبه)
Sحاوی عبارت "ام"25ام
wشماره روز در هفته، از 0 تا 60 (=شنبه)
zروز در سالعددی بین 0 تا 365
Wتعداد هفته گذشته از سال23 (=23امین هفته سال)
Fنام کامل ماهمهر
mماه از سال بصورت دورقمیعددی بین 01 تا 12
M *نام ماه از سال. مشابه Fفروردین
nماه از سال بصورت. تک رقمی برای اعداد تک رقمیعددی بین 1 تا 12
tتعداد روز در ماهعددی بین 29 تا 31
Lنشانگر سال کبیسه1 برای کبیسه و 0 برای غیرکبیسه
oسال چهاررقمی1388
Yسال چهاررقمی1366
yسال دورقمی87
aاوقات روز (am و pm)ب.ظ و ق.ظ
Aاوقات روز بصورت کامل (am و pm)بعد از ظهر و قبل از ظهر
Bزمان اینترنتیعددی بین 000 تا 999
gساعت در روز. تک رقمی برای اعداد تک رقمیعددی بین 1 تا 12
Gساعت در روز. تک رقمی برای اعداد تک رقمیعددی بین 0 تا 23
hساعت در روز بصورت دورقمیعددی بین 01 تا 12
Hساعت در روز بصورت دورقمیعددی بین 00 تا 23
iدقیقه در ساعت بصورت دورقمیعددی بین 00 تا 59
sثانیه در ساعت بصورت دورقمیعددی بین 00 تا 59
uمیکروثانیهمثل 54321
eشناسه موقعیت زمانی (Timezone)UTC
Iمشخص کننده روز و شب1 برای روز و 0 برای شب
Oاختلاف ساعت جهانی (GMT)0330+ (برای ایران)
Pاختلاف ساعت جهانی (GMT)03:30+ (برای ایران)
Tمخفف شناسه موقعیت زمانی (Timezone)MDT
Zاختلاف ساعت جهانی بر اساس ثانیه12600+ (برای ایران)
cنمایش زمان کاملY-m-d h:i:s P
rنمایش زمان کاملl j F Y h:i:s O
Uبرچسب زمان (Timestamp)123588545

* کاراکتر M در تابع اصلی، سه حرف اول ماه مانند Jan و Mar غیره رو برمی گردونه که چون همانندسازی این روش در فارسی رایج و جالب نیست، از نام کامل ماه استفاده شده.

 

Download jcalendar class

 

تو چی فکر می کنی؟


محسن مگاهرتز!؟ :) : این کار فقط میتونه کار یک امیرحسین کارکشته باشه که فقط خودتی.
مخ لصیم... mokh less im
(2 سال و 10 ماه و 16 روز و 18 ساعت و 1 دقیقه پیش)

Hamed Valiolahi : خیلی ممنون دوست گرامی، خیلی مفید بود ;)
(2 سال و 10 ماه و 3 ساعت و 39 دقیقه پیش)

داوود : ممنون !!!
(2 سال و 9 ماه و 26 روز و 7 ساعت و 28 دقیقه پیش)

پارسا : آقا دستت درد نکنه . خوبیش این مطلبی که تو نوشتی اینه که زیاد حاشیه نرفتی و رفتی سر اصل مطلب .
بعضی از این سایت های آموزشی زیاد شر و ور می نویسن . راستی پیروزی قاطعانه آقای احمدی نژاد رو به همه طرفدارانش که خودمم یکی از اونام تبریک میگم و براش آروزی موفقیت دارم
(2 سال و 8 ماه و 7 ساعت و 27 دقیقه پیش)

بهنام : عالی بود من توی یک وب سایت جالب از این ماژول استفاده میکنم که حتما لینکش رو به شما ارسال خواهم کرد.
(2 سال و 6 ماه و 2 روز و 6 ساعت و 26 دقیقه پیش)

آرمان : بسیار عالیه. خیلی بدرد من خورد.
(1 سال و 10 ماه و 14 روز و 11 ساعت و 36 دقیقه پیش)

اشکان : می گم این قضیه jdate این‌ها رو من قبلا دیده بودم
و نیازی به فکر زیاد نبود چون موجود بود ! http://tinyurl.com/28zswu2

البته یک سری روش های استفاده کردی که من نگاه نکردم ولی شاید بهینه شده باشه و این می تونه کار مفیدی باشه که تو کردی نه نوشتن این تابع
(1 سال و 8 ماه و 12 روز و 9 ساعت و 33 دقیقه پیش)

سیدمحسن موسوی : سلام
بابا ای ولللللللللللللللللللللللللا
دمت جییییییییییز
خیلی خوب بود
(1 سال و 4 ماه و 3 روز و 11 ساعت و 36 دقیقه پیش)

یک دوست : سلام ممنون
شما اگه بتونید تابع mktime پی اچ پی رو به جلالی تبدیل کنید اون خوبه چون بدون اون ساختن تقویم کاملا فارسی امکان نداره
(1 سال و 3 ماه و 28 روز و 21 ساعت و 22 دقیقه پیش)

یک دوست : متاسفانه باید بگم تابع jdate() شما درست کار نمیکنه و حدود 3 ساعت جلوتر کار میکنه.
اگه ساعت 10 شب چکش کنید میفهمید که من چی میگم.
(1 سال و 3 ماه و 26 روز و 5 ساعت و 35 دقیقه پیش)

امیرحسین : این کلاس زمان رو توسط تابع date در php محاسبه می‌کنه و این تابع هم زمان تنظیم شده‌ی سرور رو معیار قرار میده. به همین منظور من پارامتری سومی با نام GMT به تابع jdate اضافه کردم تا این اختلاف ساعت رو تنظیم کنیم.
مثلا اگر شما سه ساعت اختلاف دارید باید تابع رو اینطور بکار ببرید:
;(cal->jdate('d F Y', time(), 12600
(1 سال و 3 ماه و 26 روز و 4 ساعت و 19 دقیقه پیش)

شهرام : سلام ممنون از تابع خوبتون اما من باهاش یک مشکل دارم

cal->jdate("Y/n/j
cal->jdate("Y/n/d
این دوتا خروجیشون مثل همه در صورتیکه باید اولی روزهای تک رقمی رو بدون صفر نشون بده ولی دورقمی نشون میده لطفا درستش کنید منم در جریان بذارید ممنون
(1 سال و 3 ماه و 17 روز و 21 ساعت و 14 دقیقه پیش)

امیرحسین : شهرام جان نسخه جدید رو استفاده کنید.
(1 سال و 3 ماه و 12 روز و 21 ساعت و 17 دقیقه پیش)

ماهان : سلام. من که با این کلاس زندگی کردم ! خیلی چیزه توپی بود. فقط یکار کنی خیلی خوف میشه. تبدیل از شمسی به میلادی و بلعکس رو که تو ی آرایه برگدونه هم بذاره عالی میشه. زیاد کاره سختی نیست تو سایت codeproject یه persian calendar هست که اینکا رو می کنه.
(1 سال و 3 ماه و 1 روز و 5 ساعت و 41 دقیقه پیش)

خاله زنک : سلام امیر حسین منم 1سوال در مورد زمان در تابع data داشتم می خواستم بدونم چه جوری میشه که این تابع تاریخ و شمسی برگردونه نه میلادی؟
(1 سال و 2 ماه و 22 روز و 11 ساعت و 53 دقیقه پیش)

امیرحسین : خود تابع date چنین کاری نمیکنه. تنظیماتی هست که مشخص میکنیم این توابع، از چه تقویم و تاریخ و زبانی استفاده کنند ولی برای ایران و شمسی هنوز ایجاد نشده.
بعد اگه خود تابع date چنین کاری میکرد، به نظرت ما سرمون درد میکنه که بیایم از اول کد بنویسیم؟ خب از همون استفاده میکردیم دیگه!
(1 سال و 2 ماه و 22 روز و 8 ساعت و 27 دقیقه پیش)

ميثم : در جواب امیرحسین به خاله زنگ : از php پنچ و سه و دو به بعد، تاریخ جلالی هم به پی‌اچ‌پی اضافه شده و میتونید بدون هیچ دردسری ازش استفاده کنید، البته توی لوکال! چون معلوم نیست که پی‌اچ‌پی نصب شده روی سرورا کی بخوان آپدیت بشن!

بعد من یه سوال دارم، این تابع که هست میتونه عدد رو فارسی نشون بده؟ مثلن به جای 2 نشون بده ۲ ؟
(1 سال و 2 ماه و 16 روز و 3 ساعت و 57 دقیقه پیش)

امیرحسین : نسخه‌ی کنونی اعداد رو بصورت فارسی و انگلیسی نمایش میده. توضیحات همین پست رو کامل مطالعه کنید متوجه نحوه کارکردش میشید.
(1 سال و 2 ماه و 16 روز و 2 ساعت و 5 دقیقه پیش)

shiva........ : سلام امیر جونم میگم وقتی تاریخ و وارد می کنم سالشو میلادی میزنه مثلا28/10/2010نمی زنه 28/10/1389چی کار باید کنم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
(1 سال و 1 ماه و 27 روز و 13 ساعت و 46 دقیقه پیش)

امیرحسین : سلام.
لطفا نسخه جدید رو داونلود کنید.
(1 سال و 1 ماه و 27 روز و 11 ساعت و 56 دقیقه پیش)

شيوا.............. : نسخه جديد php رو؟من سرعت پايين نمي تونم دانلو كنم نسخه چنده؟
(1 سال و 1 ماه و 27 روز و 7 ساعت و 1 دقیقه پیش)

امیرحسین : نسخه اسکریپت رو نه خود PHP.
اگر باز هم به مشکل خوردید کدتون رو اینجا بذارید یا برای من ایمیل کنید.
(1 سال و 1 ماه و 27 روز و 6 ساعت و 41 دقیقه پیش)

شیوا : اسکریپ چی؟؟؟؟؟؟؟؟؟؟؟؟؟؟
(1 سال و 1 ماه و 19 روز و 13 ساعت و 15 دقیقه پیش)

امیرحسین : اسکریپت مبدل تاریخی که از همین صفحه دانلود کردید.
(1 سال و 1 ماه و 19 روز و 12 ساعت و 59 دقیقه پیش)

مهران : حیفم اومد یه دست مریزادی نگم !
واقعا کارت عالی بود امیرحسین جان ، مرسی !
(1 سال و 1 ماه و 16 روز و 21 ساعت و 28 دقیقه پیش)

احمدرضا : داداش معرکه بود، مدتی بود که دنبال چنین چیزهایی می گشتم خیلی کمکم کرد.

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

موفق باشی
(1 سال و 1 ماه و 15 روز و 23 ساعت و 30 دقیقه پیش)

Doost : سلام - ما هم یه سایت داریم که در مورد همین بحث تبدیل تاریخه - از دهه ی فجر 89 ، سایتمون رو افتتاح میکنیم. حتماً یه سری بزنید
http://jdf.scr.ir
(1 سال و 19 روز و 15 ساعت و 10 دقیقه پیش)

میثم : سلام

ممنون از اینکه زحمت کشیدید و این کلاس را آماده کردید.

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

ببینید من الان با تابع mktime یک زمان شمسی رو تبدیل به timestamp میکنم و بعد این timestamp رو با تابع jdate نمایش میدم ولی ماه اون رو یکی قبل تر نمایش میده و مثلا اگر این طوری از اون استفاده کنیم:
$my_date = $cal->mktime(0,0,0,11,00,1389);

echo $cal->jdate('Y/m',$my_date,12600)

در زمان چاپ بوسیله jdate ماه اون رو یکی کمتر نشون میده!
میخواستم راهنمایی کنید برای رفع این مشکل چه کار باید کنم.

ممنون
(11 ماه و 18 روز و 10 ساعت و 3 دقیقه پیش)

امیرحسین : سلام
تابع mktime با روز 0 این مشکل رو داره. مقدار روز رو 1 قرار بدید:
;(my_date = $cal->mktime(0,0,0,11,1,1389
(11 ماه و 17 روز و 59 دقیقه پیش)

میثم : سلام

ممنون .
الان من یه مشکل تازه دارم با تابع mktime
من وقتی از تابع mktime به این صورت استفاده می کنم:
mktime(00,00,00,11,01,1389)
و اون رو مجدد به وسیله تابع date به شمسی بر می گردونم این مقدار را بر می گرداند:
1389/10/30 00:11:00
در صورتی که من در تابع mktime زمان را صفر قرار داده بودم و حالا این 11 دقیقه از کجا آمده است؟

ممنون میشم راهنمایی بفرمایید
(11 ماه و 14 روز و 7 ساعت و 57 دقیقه پیش)

امیرحسین : من همین کدی که شما دادی رو تست کردم و جواب صحیح برگردوند. لطفا مجددا امتحان کنید. شاید نکته‌ای رو جا انداختی....
(11 ماه و 14 روز و 2 ساعت و 9 دقیقه پیش)

یک دوست : دستت درست. عالی بود
(10 ماه و 1 روز و 11 ساعت و 8 دقیقه پیش)

مرتضی حیدری : واقعا عالی بود واقعا کارت درسته
(9 ماه و 13 روز و 11 ساعت و 22 دقیقه پیش)

الناز : fبا سلام و تشکر- در ساعت 6 بعد از ظهر تاریخ یک روز به جلو میره باید چی کار کنم؟
(9 ماه و 1 روز و 9 ساعت و 34 دقیقه پیش)

الناز : fبا سلام و تشکر- در ساعت 6 بعد از ظهر تاریخ یک روز به جلو میره باید چی کار کنم؟
(9 ماه و 1 روز و 8 ساعت و 9 دقیقه پیش)

یک دوست : با سلام و خسته نباشيد.
من از ماجول شما در فارسي سازي تاريخ انجمن ساز رايگان جوملا(كيوننا) استفاده كردم و برمبناي اون يه پچ براشون نوشتم . توي فروم با ذكر سايت شما مطلب رو ارسال كردم تا زحمات شما با ذكر نام شما استفاده بشه.

http://www.kunena.org/forum/43-farsi/97284----


http://playfa.ir/index.php?option=com_kunena&func=view&catid=5&id=2&limit=6&limitstart=6&Itemid=501#412
(8 ماه و 2 روز و 16 ساعت و 32 دقیقه پیش)

یوسف : سلام آقا امیر حسین
خسته نباشی.واقعا وب سایت خوب و جالبی داره. من هم با این کلاس تاریخ یه مشکل دارم که هنگام زدن تاریخ ساعت رو دقیقا اعمال نمی کنه یعنی ما اومدیم زمان سرور رو براساس ساعت ایران تنظیم کردیم تا دیگه مشکل تبدیل زمان و عقب و جلو کشیدن رو نداشته باشیم حالا این کتابخانه شما چند ساعت عقب تر یا جلوتر میزنه مثلا اگه امروز شنبه ساعت 8 بعد ازظهر باشه میزنه 1شنبه
ممنون میشم بگی چطور این مشکل رو برطرف کنم. چون خیلی لازم دارم.
در ضمن بازم از محتوای خوب و مفید وب سایتت ممنونم. موفق باشی.
(8 ماه و 2 روز و 10 ساعت و 49 دقیقه پیش)

امیرحسین : این کلاس از تابع date برای دریافت ساعت استفاده میکنه. این یعنی شما کلا با زمان مشکل دارید. مشکلتون رو با نمایش ساعت در تابع date حل کنید این کلاس هم اصلاح میشه.
(8 ماه و 2 روز و 10 ساعت و 13 دقیقه پیش)

یک دوست : خیلی عالی ...
فقط امیدوارم باگ week number هم توی این نسخه حل شده باشه چون توی قبلی اعصابم رو خورد کرد مجبور شدم round() کنم .
(7 ماه و 2 روز و 14 ساعت و 4 دقیقه پیش)

بهار : خب به نظر خيلي عالي مياد اميرحسين، اما نميدونم چرا فارسي هاش رو واسه من داره بد نشون ميده
كركتراي عجيب البته چك كردم unicode هم utf8 بود
مشكل كجاست فكر ميكني؟...
(7 ماه و 2 روز و 7 ساعت و 11 دقیقه پیش)

جانان : من خیلی مشکل دارم توی تاریخ شمسی.
من یه سایت با نرم افزار moodle ساختم.php بیس هست.
بعد نمیدونم این کد و دستورات کجا وارد کنم ، توی temp?
(5 ماه و 29 روز و 10 ساعت و 43 دقیقه پیش)

ذوالفعلی : تشکر می کنم.
چند تا ماجول فارسی دیگه هم هست که متاسفانه همه از یک منبع استفاده کردند و هیچ کدام درست (دقیق) نیست.
کلاس شما درست کار می کند. باز هم متشکرم
(3 ماه و 23 روز و 5 ساعت و 36 دقیقه پیش)

 

me

امیرحسینم. اسمم رو دوست دارم، خودم رو دوست دارم. تهران زندگی می کنم. فارغ التحصیل مهندسی صنایع هستم. برنامه‌نویسی و طراحی وب می کنم. در واقع Web Developer محسوب میشم. برنامه نویسی و وقت گذرونی با وب تنها کاریه که خسته ام نمی کنه.
آدم خیلی سردی هستم، اینو دور و وری هام میگن. ولی به نظر خودم سرد نیستم در واقع گرمای خودم رو کم بروز می دم! آدما رو اغلب دوست دارم غیر از اون مواقعی که اونا من رو نادیده میگیرن!

این سایت رو بعد از کلی اینور اونور دوباره راه انداختم تا هرچی دوست دارم توش بنویسم، چه کسی بخونه چه نخونه.
خلاصه اینجا خونه منه،

به خونه امیرحسین خوش اومدی...

MODx | Template World