در برنامه نویسی PHP مواقعی پیش می آید که نیاز دارید دو تاریخ را به یکدیگر مقایسه نمایید و فاصله زمانی بین دو تاریخ را پیدا کنید که در بخش زیر نحوه بدست آوردن آن را به صورت کامل برای شما شرح خواهم داد. تاریخ ها را نمی توانید به صورت عادی از هم منها نمایید و می بایست آنها را به مقدار عددی تبدیل نمایید. برای انجام این کار می توانید از تابع [فقط کاربران عضو میتوانند لینک ها را مشاهده کنند]استفاده نمایید. این تابع تاریخ شما به صورت تاریخ UNIX تبدیل می نماید که این تاریخ فاصله زمان تاریخ شما به ثانیه از زمان یکم 1970 می باشد. در زیر نحوه انجام این کار را به شما نمایش می دهم:
$date1 = "2007-03-24 00:00:00";
$date2 = "2009-06-26 00:00:00";
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d days\n", $years, $months, $days);
در کد بالا تاریخ می توانید به صورت تاریخ و زمان نیز باشد. متغییر $diff دو تاریخ را به صورت عددی از یکدیگر منها می نماید و بنابراین $date2 می بایست زمان جدیدتر باشد. برای بدست آوردن تفاوت سالیانه دو تاریخ می بایست فاصله زمانی بدست آماده را به سال تبدیل نمایید و از تابع floor برای روند کردن آن استفاده نمایید. برای بدست آوردن تعداد ماه ابتدا می بایست تعداد سال ها به ثانیه را از تفاوت دو تاریخ به ثانیه کسر نموده و سپس آن را به ماه تبدیل نمایید و برای سایر واحدهای تاریخ نیز به همین ترتیب عمل نمایید. در صورتی که قصد دارید فاصله بین دو تاریخ را به ساعت و دقیقه و همچنین ثانیه بیان نمایید می توانید کدهای زیر را به کد اصلی خود اضافه نمایید.
$hour = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*24));
$min = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hour*60*60)/ (60));
البته می توانید فاصله زمانی بین دو تاریخ را فقط توسط المان های دیگر نظیر ساعت و دقیقه بیان نمایید که در زیر مثال آن را برای شما آورده ام:
$hour = floor($diff / (60*24));
$min = floor(($diff - $hour * 60*24) / (24));







سورس و منبع:
[فقط کاربران عضو میتوانند لینک ها را مشاهده کنند]