تابع strtotime در PHP برای انجام عملیات مختلف با تاریخ و زمان

تابع strtotime در PHP برای انجام عملیات مختلف با تاریخ و زمان

تابع strtotime در PHP

زبان برنامه نویسی PHP توابع کتابخانه ای متعددی برای کار با زمان ارائه می کند. یکی از جذابترین توابع PHP، تابع strtotime است که کاربرد زیادی هم دارد. خصوصا زمانی که نیاز به محاسبه تاریخ ها و زمان ها نسبت به یکدیگر دارید، این تابع به کمک شما می آید. این تابع، هر عبارت اتگلیسی که حاوی اطلاعاتی توصیفی درباره زمان و تاریخ است را تحلیل می کند و نتیجه را به صورت timestamp بر می گرداند. برای مثال به نمونه زیر دقت کنید:

echo strtotime("+1 day");

خروجی این تابع، timestamp زمانی به فاصله یک روز از همین لحظه است. یعنی timestamp همین لحظه در روز بعد (فردا) را می دهد.

پارامتر های ورودی و خروجی تابع strtotime

ورودی و خروجی های این تابع به صورت زیر است:

int strtotime ( string $time [, int $now = time() ] )

این تابع دو پارامتر ورودی دارد که اولین آنها اجباری و پارامتر دوم اختیاری است:

  1. پارامتر ورودی اول (time)، یک رشته است که حاوی متن توصیفی درباره زمان و تاریخ به زبان انگلیسی است. همه فرمت های معتبر برای این رشته را می توانید در سایت php بخوانید.
  2. پارامتر ورودی دوم (now)، یک timestamp است که به عنوان پایه محاسبات برای تاریخ های نسبی استفاده می شود. این پارامتر به صورت پیش فرض، timestamp همین لحظه که از تابع time() به دست می آید، را می گیرد.

خروجی این تابع دو حالت دارد:

  1. در صورت موفقیت آمیز بودن محاسبه این تابع، یک timestamp برگردانده می شود که نتیجه مورد نظر برنامه نویس است.
  2. در صورت عدم موفقیت در محاسبه، مقدار FALSE در خروجی تابع قرار می گیرد.

کاربرد هایی از تابع strtotime

  • امروز ساعت 0: برای نمونه نیاز دارید که timestamp ساعت 0:0:0 همین امروز را به دست بیاورید، کافی است خروجی تابع زیر را دریافت کنید:
    strtotime("today");
  • نمایش محتوای سایت در چند روز گذشته: محتوای سایت شما در یک جدول ذخیره شده اند و زمان ارسال مطلب نیز به صورت timestamp که عددی است، در دیتابیس قرار دارد. شما محتوای 5 روز گذشته را می خواهید. بهتر است timestamp پنج روز گذشته از این لحظه را به دست آورید، و در دیتابیس مطالب مربوط به زمان های بعد از آن را جستجو کنید. مثلا:
    strtotime("-5 days");
  • تاریخ انقضای حساب کاربر از الان تا یک سال دیگر: در سایتی که برنامه نویسی می کنید، هر کاربر برای یک سال حق حسابی را پرداخت می کند. پس از انجام پرداخت، می خواهید تاریخ انقضای حساب کاربر را در دیتابیس ذخیره کنید. کافی است، با استفاده از تابع strtotime، زمان پرداخت کاربر را با یک سال جمع ببندید:
    $expire = strtotime('+1 year', $account_time);
  • ایجاد بازه های زمانی کوچک بین دو زمان: در نظر بگیرید که باید یک بازه زمانی بین دو ساعت مختلف در روز را به قسمت های کوچکتری تقسیم کنید. برای نمونه می خواهید در یک برنامه، بازه زمانی بین ساعت 8 تا 11 صبح روز خاصی را به بخش های 15 دقیقه ای با فاصله 5 دقیقه تقسیم کنید و این بخش ها را در دیتابیس نیز ذخیره کنید. می توانید با استفاده از حلقه و فراخوانی تابع strtotime و عبارت های نسبی برای جمع بستن با تعداد دقیقه های خاصی، زمان های مورد نظر را به دست بیاورید.

عبارت های نسبی زیادی برای محاسبه زمان ها، می توانید به دست بیاورید. این تابع تقریبا تمام نیاز های محاسباتی شما برای زمان را پاسخ می گوید. برای مشاهده مثال های بیشتری از کاربرد تابع strtotime به سایت php مراجعه کنید.

نظرات

سلام
ممنون از توضیحاتتون
میشه لطفن مورد آخر رو کمی بیشتر راهنمایی کنید؟
این که ساعتی را مثلا به 20 دقیقه تقسیم کنه
ممنون میشم :)

تصویر admin
تابع strtotime همه نوع عملیات را با زمان انجام می دهد. و هر متنی که شما به آن تابع می دهید را تفسیر می کند. مثلا می توانید بگویید که به یک تاریخ یک سال یا دو روز اضافه کند یا کم کند. یا به زمانی چند ساعت یا چند دقیقه اضافه و کم کند. اینها فقط مثالی است از کارهای متنوعی که می توان با آن انجام داد. مثال های این موضوع در سایت دروپالیکا بیان شده است. در مورد بخشی که از مطلب سایت دروپالیکا در اینجا قرار داده اید، باید بگویم که این یک مثال است از اینکه یک پزشک یک سایت داشته باشد و بخواهد مثلا چند وقت ویزیت بین دو تایم مشخص کند. مثلا ساعت شروع را با strtotime به اضافه 15 دقیقه می کنیم تا زمان انهایی به دست بیاید. و بعد آن زمان را باضافه 5 دقیقه می کنم و همین طور پیش می رویم تا timestamp های شروع و پایان هر بازه زمانی مورد نظر را به دست بیاوریم. اگر پاسخ مورد نظر خود را نگرفته اید، سوالات شفافتر و جزئی تری را مطرح کنید.

سلام خسته نباشید
میشه بگین این کد دقیقا چیکار میکنه؟ بهتر بگم ترجمش کنید؟
$milliseconds = 1 * strtotime($info['expire_date']);
$date=dechex($milliseconds);
$now=date("Ymd");
$date1 = $info['expire_date'];
$newdate = strtotime ( '-10 day' , strtotime ( $date1 ) ) ;
$newdate = date ( 'Y-m-d' , $newdate );
$fdate=preg_replace('/-|:/', null, $newdate);
$engheza=$info['expired'];
ممنون میشم اگه جواب رو به میلم بزنین.

سلام
یه سوال داشتم میخاستم بذونم میشه بدون اینکه سایت روی کلاینت بارگذاری بشه در زمان مشخصی یه تابعی اجرا بشه و یا کار خاصی انجام بشه
ممنون

تصویر admin

حسین خان،

بله این امکان هست. البته نیاز به این هست که هاستینگ شما امکاناتی در اختیار شما قرار بدهد. اگر سرور ویندوز یا لینوکس دارید که این موضوع حل است. با تنظیم کرون در لینوکس و تسک اسکجولر ویندوز می توانید تنظیم کنید که در زمان های مشخصی صفحه ای از سایت شما را باز کند.

اگر هاستینگ دارید مثل سی پنل معمولا مشکلی نیست ولی بعضی از هاستینگ ها این امکان را می بندند. یعنی در سی پنل می توانید کرون را تنظیم کنید که صفحه ای از سایت شما را باز کند. به این صورت بدون درگیر شدن کاربر می توانید عملیاتی در سایت انجام بدهید آن هم به صورت زمانبندی شده و مشخص.

سلام و خسته نباشید
من دارم روی یک سیستم مدیریت محتو)CMS( کار میکنم و میخوام مطلبی که ایجاد کردم تو اون تاریخ و زمان مشخص شده رو سایتم نمایش داده بشه لطف میکنید راهنمایی کنید و اینکه زمان رو در دیتا از چه نوعی بگیرم مرسی

میشه بگین این کد چکار میکنه؟
function firstDayofWeek($week, $year) {
$Jan1 = mktime ( 1, 1, 1, 1, 1, $year );
$MondayOffset = (11 - date ( 'w', $Jan1 )) % 7 - 3;
$desiredMonday = strtotime ( ($week - 1) . ' weeks ' . $MondayOffset . ' days', $Jan1 );
return $desiredMonday;

ارسال نظر