کار با توابع تاریخ (date) در PHP

PHP   
16 سپتامبر 2014   

تاریخ و زمان چیزهایی هستند که ما به طور زیادی با آن ها هر روز سر و کار داریم و در برنامه نویسی هم به درد ما می خورند. php  برای ما توابعی را آماده کرده که می توانیم با استفاده از آن ها کارهای زیادی را انجام دهیم. اصلی ترین تابع برای تاریخ و زمان، تابع date() می باشد که در ادامه به توضیح آن می پردازیم.

date()

این تابع برای ساختن فرمت های مختلف تاریخ ویا زمان است. این تابع دو پارامتر دارد که یکی برای فرمت خروجی تاریخ (پارامتر format) و دیگری timestamp یا مهر زمانی می باشد. واردکردن پارامتر timestamp دلخواه می باشد و این پارامتر پایه و منباء اطلاعاتی که پارامتر format دریافت می کند را تنظیم می کند (اگر ابهامی احساس می کنید در ادامه رفع خواهد شد). شکل کلی این تابع به صورت زیر است:

date(format, timestamp);

پارامتر format باید به شکل رشته ای وارد شود. این رشته باید دارای فرمت خاصی باشد که تنها مقادیر خاصی می تواند در آن قرار گیرد. در زیرجدولی را مشاهده می کنید که شامل این کاراکتر ها می باشد:

کاراکتر توضیحات
d روز از ماه را به شکل عدد دورقمی نشان می دهد (از 01 تا 31).
D روز هفته را به صورت سه حرفی نشان می دهد.
j روز را به صورت عدد 1 یا دوحرفی بدون صفر پیش از آن نشان می دهد (از 1 تا 31).
l روز هفته را به صورت کامل نشان می دهد.
N روز هفته به شکل عددی نشان می دهد (از 1 تا 7).
S پسوند تاریخ را به شکل انگلیسی نشان می دهد (st، nd، rd یا th).
w روز هفته را به شکل عددی نشان می دهد (از 0 تا 6).
z روز از سال را نشان می دهد (از 0 تا 365).
W شماره هفته از سال را نشان می دهد.
F نام کامل ماه را نشان می دهد.
m شماره ماه به شکل عددی را همراه با صفر پیش از آن نشان می دهد (از 01 تا 12).
M نام ماه را به صورت سه حرفی نشان می دهد.
n شماره ماه بدون صفر پیش از آن را به شکل عددی نشان می دهد (از 1 تا 12).
t تعداد روزهای ماه را نشان می دهد.
L سال کبیسه را نشان می دهد (اگر سال کبیسه باشد 1 درغیر این صورت 0).
o شماره سال را به شکل عددی نشان می دهد.
Y شماره سال را به صورت 4 حرفی نشان می دهد.
y شماره سال را به صورت 2 حرفی نشان می دهد.
a am(قبل از ظهر) یا pm(بعد از ظهر) را با حروف کوچک نشان می دهد.
A Am یا PM را با حروف بزرگ نشان می دهد.
g ساعت را به صورت 12 ساعته و بدون صفر پیش از آن نشان می دهد (از 1 تا 12).
G ساعت را به صورت 24 ساعته و بدون صفر پیشین نشان می دهد (از 0 تا 23).
h ساعت را به صورت 12 ساعته و همراه با صفر پیشین نشان می دهد (از 01 تا 12).
H ساعت را به صورت 24 ساعته و همراه با صفر پیشین نشان می دهد (از 00 تا 23).
i دقیقه را همراه با صفر پیشین نشان می دهد (از 00 تا 59).
s ثانیه را همراه صفر پیشین نشان می دهد (از 00 تا 59).
u میکروثانبه را نشان می دهد.
e منطقه زمانی را نشان می دهد (مانند gmt یا utc).
O تفاوت زمانی با زمان گرینویچ را به ساعت نشان می دهد.
P تفاوت زمانی با گرینویچ را به ساعت و دقیقه نشان می دهد.

 

همین که می بینید حروف کوچک و بزرگ مقادیر مختلفی را دارا هستند و باید در این مورد دقت لازم را به جا آورید.

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

مثال:

در این مثال تاریخ و زمان را بوسیله تابع date چاپ می کنیم:

 

خروجی:

چاپ تاریخ و ساعت با استفاده از تابع date

خروجی

اما این مقادیر خروجی مربوط به منطقه زمانی تهران نیست و مربوطه به منطقه زمانی پیشفرض می باشد. برای تنظیم منطقه زمانی خود باید از تابع date_default_timezone_set() استفاده کرد.

تابع date_default_timezone_set()

همانطور که گفته شد این تابع برای تنظیم منطقه زمانی است. همچنین می توان منظقه زمانی قعلی و ثبت شده را توسط تابع date_default_timezone_get() دریافت کرد. کار تابع date_default_timezone_set() در اصل تنظیم مقدار date.timezone موجود در فایل php.ini می باشد. این تابع تنها دارای یک پارامتر با نام timezone_identifier می باشد که به صورت رشته ای می باشد. برای تنظیم منطقه زمانی برای ایران باید از مقدار Asia/Tehran استفاده کرد:

 

پس اگر این خط و سپس کدهای مثال قبل را اجرا کنیم کد و خروجی مانند زیر خواهیم داشت:

 

خروجی:

استفاده از تابع date در PHP

خروجی

مهرهای زمانی یا timestamps

می توان برای تابع date() یک مهر زمانی مشخص کرد. به صورت پیشفرض این مقدار برابر با تاریخ و زمان فعلی است و اطلاعات بازگشتی از این تابع مبنی بر این تاریخ و زمان است اما ممکن است زمان یا تاریخی غیر از تاریخ و زمان فعلی موردنظر باشد.

مهرهای زمانی unix شامل یک عدد می باشد که تعداد ثانیه های بین دو تاریخ را مشخص می کند (شروع آن از ابتدای ژوئن 1970 و انتهای آن زمان فعلی یا زمانی دیگر که مشخص خواهد شد می باشد).

توابعی برای ساخت تاریخ یا زمان های دلخواه وجود دارد که به توضیح هریک می پردازیم.

تابع time()

این تابع تاریخ و زمان فعلی را برمی گرداند و مقدار پیشفرض تابع date() برای پارامتر timezone_identifier نیز همین است.

این تابع زمان فعلی را به عددی تبدیل می کند که می توان آن را در تابع date() استفاده کرد. اگر خروجی این تابع را چاپ کنیم خروجی آن عددی مانند خروجی زیر می باشد:

 

خروجی:

استفاده از مهر زمانی time()

خروجی

تابع mktime()

این تابع برای ساخت یک زمان مشخص است که باید تمام مقادیر تاریخ و زمان به صورت دستی وارد شود. این مقادیر شامل ساعت، دقیقه، ثانیه، ماه، روز و سال می باشد. شکل کلی استفاده از این تابع به صورت زیر است:

به مثال زیر توجه کنید:

 

خروجی:

استفاده از مهر زمانی mktime()

خروجی

تابع strtotime()

کار این تابع تبدیل یک مقدار رشته ای به یک عدد قابل تشخیص برای تابع date() می باشد (مانند تابع mktime() و time()). تنها پارامتر اچباری این تابع time می باشد که مقدار رشته ای را دریافت می کند. شکل کلی آن به صورت زیر است:

 

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

 

خروجی:

استفاده از تابع strtotime()

خروجی

مثالی دیگر:

در این مثال می خواهیم تعداد روزهای یک ماه را به دست آوریم. ابتدا نام ماه را به وسیله تابع strtotime() به یک مهرزمانی (timestamp) تبدیل کرده و سپس توسط کاراکتر “t” برای پارامتر format از تابع date() تعداد روزهای ماه را بدست می آوریم. کد این برنامه به شکل زیر خواهد بود:

 

خروجی:

28

دراین مثال تعداد روزهای ماه February را بدست آوردیم که برابر با 28 بود.