توابع تاریخ و زمان در php + تاریخ شمسی

  • آپدیت شده در تاریخ

توابع تاریخ و زمان در php + تاریخ شمسی

بروز رسانی : افزودن بخش تبدیل timestamp به تاریخ قابل خواندن

تعداد توابع تاریخ و زمان در php بسیار زیاد است . همه این توابع در زیر مجموعه مربوط به extension های time و date هستند . این توابع عملیات مختلفی مثل دریافت تاریخ و زمان بر اساس اطلاعات پارامترهای ورودی , دستکاری تاریخ و زمان , تبدیل فرمت زمان ورودی به دیگر مقادیر و بیشتر .. را انجام می دهند.

در آموزش توابع تاریخ و زمان در php قصد داریم توابع پایه تاریخ و زمان در php را بررسی کنیم . چندین مثال کاربردی در مورد کار با date و time را خواهیم دید .

  • دریافت اطلاعات تاریخ و زمان فعلی
  • دریافت تاریخ فعلی بر اساس فرمت خاص
  • محاسبه timestamp تاریخ داده شده
  • محاسبه تاریخ شمسی با کتابخانه jdf

 دریافت اطلاعات تاریخ و زمان فعلی

تابع getdate() برای دریافت اطلاعات تاریخ و زمان فعلی در قالب یک آرایه به کار می رود . این تابع ,روز ماه و روز هفته ,  سال , ساعت , دقیقه و ثانیه و timestamp و کلی اطلاعات دیگر را به صورت آرایه ای برگشت می دهد .

دریافت تاریخ فعلی بر اساس فرمت خاص

من برای دریافت تاریخ فعلی بر اساس فرمت خاص از تابع date() استفاده کردم . این تابع دو آرگومان را می پذیرد. اولین آرگومان نحوه نمایش تاریخ و آرگومان دوم timestamp . اگر دومین آرگومان ست نشده باشد , تاریخ و زمان فعلی را بر اساس فرمت مشخص شده برمیگرداند .

من فرمت MM-DD-YY را برای تابع date مشخص کردم .

توابع تاریخ و زمان در php + تاریخ شمسی

محاسبه timestamp تاریخ داده شده

تابع time() برای دریافت timestamp فعلی استفاده می شود.

timestamp در واقع اعدادی از ثانیه های سپری شده از نصف شب تاریخ ۱ جون سال ۱۹۷۰ بر اساس ساعت نصف النهار مبدا یا همان گرینویچ است . و پس , برای دریافت timestamp یک زمان خاص باید از تابع mktime() استفاده کنیم .

این تابع نیازمند ساعت , دقیقه , ثانیه , ماه , روز و سال در فرمت (H, I , S , M , D , Y) مانند مثال زیر است .

تبدیل timestamp به تاریخ قابل خواندن

همانطور که در بالا توضیح دادم , timestamp اعدادی به ثانیه از یک تاریخ خاص است که برای تبدیل آن به یک تاریخ میلادی باید آن را به عنوان آرگومان دوم تابع date وارد کنیم تا تاریخ صحیح را بر اساس فرمتی که در آرگومان اول تابع date() است , به ما برگشت داده شود .

در مثال بالا می بینید که عدد ۱۵۰۵۴۱۵۷۰۰ به ثانیه نشانگر تاریخ ۲۰۱۷/۰۹/۱۴ است .!

تاریخ شمسی در php

برای ایجاد تارخ شمسی از کتابخانه jdf که برای تبدیل تاریخ و زمان و روز و ماه های میلادی به شمسی است , استفاده کنید .کافیست فایل کتابخانه را از اینجا لینک دانلود و در فایل php خود هر جا قصد استفاده از تاریخ و زمان را داشتید فراخوانی کنید و …

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

https://jdf.scr.ir/rahnama/?t=jdate

توابع مربوط به تاریخ و زمان در php

همانطور که گفتم تعداد توابع تاریخ و زمان در php بسیار زیاد است . همه این توابع در زیر مجموعه مربوط به extension های time و date هستند . لیست کوچکی از این توابع به صورت زیر است .

  • checkdate() –  زمان را بر اساس فرمت و ترتیب ( ماه , روز و سال ) اعتبار سنجی می کند.
  • strtitime() – زمان مورد نظر در قالب رشته (۲۰۱۷-۱۰-۱۰) را به timestamp تبدیل می کند.
  • date_diff() – اختلاف بین آبجکت date را محاسبه و آرایه ای از تفاوت ها را در یک شی آرایه ای برگشت می دهد .

برای کار با توابع تاریخ و زمان در php به صورت حرفه ای می توانیم از ویژگی کلاس های DateTime و DateTimezone استفاده کنیم .

همانطور که دیدید کار با توابع تاریخ و زمان در php بسیار ساده و آسان است . در بسیاری از کارها در صفحات وب تاریخ و زمان حرف اول را در ذخیره سازی اطلاعات بخصوص در دیتابیس زا می زند.

موفق و پیروز باشید

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

آموزش های رایگان بیشتر در اینستاگرام ما ...

NETPARADIS /
مطالب زیر را حتما بخوانید
دیدگاه کاربران (۴۰)

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

  1. علی ۲۸ مهر ۱۳۹۹

    سلام من از jdf استفاده می کنم اما تاریخ رو دو سه هفته قبلتر نشون می ده می دونید مشکل از کجاست؟

    پاسخ
    1. حسن شفیعی ۲۸ مهر ۱۳۹۹

      سلام. تاریخ سرور احتمالا مشکل داره یا تایم زون رو مشخص نکردید یا اینکه اون timestampی که میدید دقیقا برای چند هفته قبل هست.

      پاسخ
  2. رضا ۱ خرداد ۱۳۹۹

    سلام جناب شفیعی وقت بخیر.من یه ربات api مدیریت گروه دارم ک قسمت تاریخ شارژ و این چیزا میلادی هست و خواستم بدونم چطور میتونم اون رو به شمسی تغییر بدم.همچنین چه دستوری و چه طوری به سورس ربات اضافه کنم ک ربات بعد پیام دادن در گروه بعد چند دقیقه پیام خودشو پاک کنه و اینکه چطور میشه کاری کرد هر ادمینی خواست ربات پنل رو به پیویش بفرسته ن داخل گروه.تشکر

    پاسخ
    1. حسن شفیعی ۲ خرداد ۱۳۹۹

      سلام. نحوه تغییر به تاریخ شمسی که در اینجا مشخصه. شما فایل jdf.php رو که بالا گذاشته شده لینکش رو دانلود و داخل سورس include می کنید و بعد توابع date رو به jdate تغییر میدید.
      باید با نحوه کار deleteMessage و همچنین کرون جاب آشنا باشید که آموزش cron job رو ببینید و کار با api تلگرام رو یا بگیرید.
      https://netparadis.com/managing-cron-jobs-with-php
      netparadis.com/tutorials/telegram-bot

      پاسخ
      1. رضا ۳ خرداد ۱۳۹۹

        تشکر جناب شفیعی.اون کاری ک گفتین انجام دادم اما متاسفانه فقط تاریخ روز رو فارسی میزنه و تاریخ ثبت شارژ و تاریخ اتمام شارژ رو همون میلادی میزنه.مشکل کجاست؟
        راجبه کرون جاب هم باهاش آشنا هستم و چون فایل های سورس زیاد هستن خواستم بدونم چه کدی رو باید اضافه کنم ک کرون اون پیام مورد نظر رو بعد چند دقیقه پاک کنه؟
        دوره ساخت بات تلگرام با php هم تهیه کردم.اگه لطفی کنید بگین چه کدی رو اضافه کنم به سورس ممنون میشم و اینکه چکار کنم ربات پنل رو به خصوصی ادمین هم بفرسته.تشکر

        پاسخ
      2. حسن شفیعی ۴ خرداد ۱۳۹۹

        بنده با ساختار سورس شما آشنا نیستم و همانطور که گفتید تعداد فایل هاش زیاد است معلومه سورس زیاد ساختار جالبی نداره وتغییرات سخت هست.
        اگر میلادی میزنه یعنی یه جاهایی از Date استفاده شده پس همه جا و همه فایل ها رو باید تک به تک جستجو کنید jdf رو اضافه و بعد date رو به jdate تبدیل کنید
        نیازه که اول msgid اون پیامی که قصد دارید حذف بشه رو جایی مثلا در یک فایل با تاریخ و ساعتی که حذف میشه رو بصورت timestamp ذخیره کنید و بغهد یک فایل php جدید بسازید که داخلش باید چک بشه داخل اون فایل اولی که msgid ذخیره هست و ببینه اگر تاریخ فعلی بزرگتر از تاریخ موردنظر است بره اون پیام رو با متد deletemessage حذف کنه.
        برای ارسال هم شما اون جایی پنل رو ارسال میکنه باید کدش رو پیدا کنید و داخل متد sendmessage جایی که مثلا متغیر آیدی گروه نوشته شده رو جایگزین کنید با userid کاربر یا مدیر که داخل ربات ارسال کنه

        پاسخ
      3. رضا ۱۰ خرداد ۱۳۹۹

        جناب شفیعی عزیز کارهایی ک گفتین انجام دادم اما متاسفانه بازم فقط قسمت تاریخ امروز شمسی میشه و بقیه موارد میلادی میمونن.یه تیکه از کد هم خدمتتون میفرستم نگا کنید ببینید درست تغییر دادم یا ن
        آیا واسه اینکلود کردن باید اون فایلjdf.php رو داخل فایلی ک ست وبهوک هست اینکلود کنم یا تو تمامی فایل هایی ک تبدیل به jdate شدن اینکلود کنم؟
        چون من داخل اون فایلی ک ست وبهوک شده اینکلود کردم و متاسفانه سورس از کار افتاد و همچنین داخل تمامی فایل های ویرایش شده هم این کارو کردم بازم سورس کار نکرد و فقط در یه صورت کار کرد اونم اینکه داخل فایل شارژ اینکلود کردم و از بقیه فایل ها اینکلود رو پاک کردم ک کار کرد اما همونجور ک گفتم فقط قسمت تاریخ روز درست شد و بقیه همون میلادی بودن
        // check charge
        elseif($textmassage == “میزان شارژ” or $textmassage == “/check”){
        if ( $status == ‘creator’ or $status == ‘administrator’ or in_array($from_id,$Dev)){
        date_default_timezone_set(‘Asia/Tehran’);
        $date3 = jdate(‘Y-m-d’);
        $date2 = jdate(‘d’);
        $date1 = jdate(‘m’);
        $ndate = $settings[“information”][“expire”];
        $rdate = $settings[“information”][“dataadded”];
        $gettime2 = jdate(‘d’, strtotime($ndate));
        $gettime1 = jdate(‘m’, strtotime($ndate));
        $gettime = $gettime1 – $date1 ;
        $gettime2 = $gettime2 – $date2 ;
        $ingettime = $gettime * 30 ;
        $endtime = $ingettime + $gettime2 ;
        gaharbot(‘sendmessage’, [
        “chat_id” => $chat_id,
        “text” =>

        در مورد اون قسمت هم ک گفتین باید فایل برای کرون جابز درست کنم تا پیام رو ربات بعد چند دقیقه پاک کنه زیاد متوجه نشدم اینکه چطوری فایل رو به timestamp تبدیل کنم میشه بگین دقیق باید چکار کنم؟

        راجبه ارسال پنل به خصوصی ادمین هم اون کاری ک گفتین انجام دادم و جایی ک مربوط به ارسال پنل در گروه هست رو chat_id=>$from_id قرار دادم اما متاسفانه چیزی ارسال نکرد،مشکل از کجاست؟

        پاسخ
  3. حسین ۱۳ فروردین ۱۳۹۹

    سلام،من یک سایت دارم که یک دیتابیس بهش وصل هست با زبان پی اچ پی نوشته شده و دارای یک تیبل به نام service هست که سرویس هایی که ارائه میشه در اون ذخیره میشه و این تیبل دارای یک قسمتی به نام date هست که اونجا تاریخ ثبت سرویس مشخص شده من میخوام این تاریخ و به شمسی بگیرم یک روز بهش اضاف کنم اگه میشه کدشو بهم بدید

    پاسخ
    1. حسن شفیعی ۱۳ فروردین ۱۳۹۹

      سلام. به اینصورت میتونید استفاده کنید :
      strtotime(‘+1 day’,$date); // یک روز بعد از تاریخ $date
      موفق باشید.

      پاسخ
  4. امیرحسین آقاجانی ۱۴ اسفند ۱۳۹۸

    سلا، ممنون از سایت خوبتون..
    من دو تایم اینطوری دارم:
    ۲۰۲۰-۰۳-۰۴ ۱۴:۴۶:۰۹
    و
    ۲۰۲۰-۰۳-۰۲ ۱۵:۴۲:۲۹
    چطوری میتونم تو php حساب کنم از تاریخ و ساعت اولی تا ساعت و تاریخ دومی چند ساعت گذشته؟
    ممنون میشم کمکم کنین..
    با سپاس

    پاسخ
    1. حسن شفیعی ۱۵ اسفند ۱۳۹۸

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

      اعداد باید بصورت لاتین به تابع پاس داده شوند.
      خروجی کد php بالا : ۲۳:۰۴:۰۷ یعنی ۲۳ ساعت و ۴ دقیقه و ۷ ثانیه اختلاف این دو تاریخ است.
      موفق باشید.

      پاسخ
      1. امیرحسین آقاجانی ۱۵ اسفند ۱۳۹۸

        خیلی سپاس

        پاسخ
  5. مملی ۱۷ مهر ۱۳۹۸

    درود
    چجوری میشه یک کدو بدون لوگین کردن یوزر و به صورت اتوماتیک در دیتابیس اجرا کرد؟!

    پاسخ
    1. حسن شفیعی ۱۷ مهر ۱۳۹۸

      سلام. از کرون جاب در هاست استفاده کنید
      آموزش cron job در php
      موفق باشید.

      پاسخ
  6. محمد ۸ شهریور ۱۳۹۸

    سلام
    من یه جدول دارم که توش اسم یوزر . مبلغ . تاریخ رجیستر . تاریخ انقضا و تعداد روزی تاریخ انقضا رو ثبت میکنم.حالا میخوام با php محاسبه کنم که به طور روزانه چقدر سود به این کاربر تعلق میگیره و به صورت روزانه به جدول واریز کنه.خواستم ببینم چجوری میشه این کارو کرد

    پاسخ
    1. حسن شفیعی ۸ شهریور ۱۳۹۸

      سلام.
      مبلغ * درصد * تعداد روز / ۳۶۵ = میران سود روزانه
      و این رو میتونید ذخیره کنید
      موفق باشید.

      پاسخ
      1. محمد ۸ شهریور ۱۳۹۸

        بله منم همینکارو انجام دادم ولی این کارو باهربار رفرش شدن صفحه انجام میده و در دیتا بیس ذخیره میکه ولی من میخواد سود روزانه در روز فقط یکبار در دیتابیس ذخیره بشه

        پاسخ
      2. حسن شفیعی ۸ شهریور ۱۳۹۸

        قبل اجرای کویری sql باید یک شرط بزارید که اگر قبلا در دیتابیس نبود کویری رو اجرا کنه

        پاسخ
  7. امیر ۲۱ مرداد ۱۳۹۸

    سلام ممنونم از شما

    پاسخ
    1. حسن شفیعی ۲۱ مرداد ۱۳۹۸

      سلام. خوشحالیم که مفید واقع شده.
      موفق باشید.

      پاسخ
  8. صالح ۴ فروردین ۱۳۹۸

    سلام وقت بخیر
    من می خواهم دو تاریخ را از هم کم کنم و نمایش به صورت عدد باشه
    مثلا ۲۵/۸/۹۷ رو از ۲۵/۱۲/۹۷ = ۶۰ اگر ممکنه راهنمایی بفرمایید

    پاسخ
    1. حسن شفیعی ۵ فروردین ۱۳۹۸

      سلام. ممنون. اول طبق آموزش بالا و یکی از تیترهای آموزش, تاریخ را به timestamp تبدیل و بعد عملیات تفریق را انجام بدید
      موفق باشید.

      پاسخ
  9. مهرسا ۲۰ بهمن ۱۳۹۷

    سلام ، ببخشید یه سوال خدمتتون داشتم من اومدم برای اینکه تعداد سرویس های فعال رو در پی اچ پی نشون بدم از این متغیر استفاده کردم
    $nbat=nums_rows(“services”,”active=’۱′”);
    خوب اومدم گفتم بیا تعداد سرویس هایی که active = 1 هست تعدادشو بهم نشون بده حالا علاوه بر این میخوام یه چیز دیگه بهش اضاف کنم بگم بیا تعداد سرویس هایی که active = 1 هست و server=1 هست و تعدادشو بیا بهم بده ، چجوری باید اینکارو انجام بدم؟ الان با این کد که بالا بهتون دادم فقط تعداد سرویس هایی که active=1 هست و بهم نشون میده چجوری server هم بهش اضاف کنم؟

    پاسخ
    1. حسن شفیعی ۲۰ بهمن ۱۳۹۷

      سلام.
      nums_rows متد چه تابعی است که به اینصورت استفاده کردید ؟ احتمالا با افزودن یک شرط دیگر به کویری خودتون میتونید نتیجه رو همانطور که میخواهید تغییر بدید به هر حال باید مرجع این تابعی که استفاده کردید مشخص بشه و بعد سینتکس واضح باشه تا بدونید آیا میتونید داخل خود این تایع یک شرط دیگه قرار بدید یا نیاز است که کویری از جای دیگه تغییر کنه.

      موفق باشید.

      پاسخ
  10. مهشید ۱۸ بهمن ۱۳۹۷

    سلام عزیز من میخوام یه دستور شرطی با پی اچ پی بنویسم که دو تا ساعت و مشخص کنم مثلا ساعت ۸ صبح تا ۱۲ ظهر اگر کاربر بین این ساعت وارد سایتم شد یه دستوری و اجرا کنه میتونی کدشو برام بذاری؟
    سپاس از سایت خوبتون

    پاسخ
    1. حسن شفیعی ۱۸ بهمن ۱۳۹۷

      سلام. این موارد ساده هستند و به راحتی میتونید بنویسید.
      به هر حال کد به اینصورت خواهد بود :

      موفق باشید.

      پاسخ
  11. بهناز ۲۷ دی ۱۳۹۷

    سلام
    من میخوام در یک فرم تاریخ تولد کاربر را دریافت کنم و تقویم رو به صورت شمسی به کاربر نشون بدم.(یعنی بنا نیست بعد از وارد شدن تاریخ توسط کاربر اونو تبدیل کنم بلکه همون لحظه در قسمت input که type آن از نوع date هست میخوام تقویم فارسی نمایش داده بشه.
    باید چیکار کرد در این مواقع؟

    پاسخ
    1. حسن شفیعی ۲۷ دی ۱۳۹۷

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

      پاسخ
  12. حامد ۲۷ دی ۱۳۹۷

    خدا خیرت بده

    پاسخ
  13. حامد ۲۵ دی ۱۳۹۷

    سلام ، ببخشید من به کمک احتیاج دارم میخوام تاریخ فردای امروز به کاربر نشون داده بشه میشه کد پیی اچ پی شو واسم بنویسید
    مثلا امروز اگه شنبه باشه میخوام به کاربر تاریخ فردا نشان داده بشه ، کدشو برام می نویسید

    پاسخ
    1. حسن شفیعی ۲۵ دی ۱۳۹۷

      سلام. بفرمایید

      در مثال دوم از تابع jdate برای دریافت تاریخ شمسی استفاده کردیم
      از +۱ day برای دریافت تاریخ فردا استفاده کردیم که میتونید با اضافه و کم کردن آن چند روز بعد یا قبل را دریافت کنید
      همچنین فرمت ابتدایی نیز مشخص می کند که چه مواردی مثلا سال یا روزهای هفته, ماه و غیره را دریافت کنید

      موفق باشید

      پاسخ
      1. فرهنگ ۲۵ آذر ۱۳۹۸

        خدا اموات شما را بیامرزه برادر

        پاسخ
      2. حسن شفیعی ۲۹ آذر ۱۳۹۸

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

        پاسخ
  14. mr.rooboot ۱۵ آذر ۱۳۹۷

    تو خیلی خوبی پسر

    پاسخ
    1. حسن شفیعی ۱۵ آذر ۱۳۹۷

      شما خیلی لطف دارید. موفق و پیروز باشید

      پاسخ
  15. mr.rooboot ۱۵ آذر ۱۳۹۷

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

    پاسخ
    1. حسن شفیعی ۱۵ آذر ۱۳۹۷

      سلام. خوشحالم که مفید واقع شده. احتمالا تابع رو اشتباه صدا زدید . باید به جای date() از jdate() استفاده کنید(اول نام تابع حرف j را جا نندازید). البته قبلش باید کتابخانه jdf.php را include کنید تا تابع شناخته بشه.

      موفق باشید.

      پاسخ
  16. امیرحسین آقاجانی ۴ اردیبهشت ۱۳۹۷

    سلام، ممنون از آموزش خوبتون!
    یه سوال داشتم! با تابع strtotime میخوام یه فرمولی بنویسم که بتونه فردا و پس فردای اون روز رو محاسبه کنه!
    ممنون میشم کمکم کنین

    پاسخ
    1. حسن شفیعی ۴ اردیبهشت ۱۳۹۷

      سلام . خواهش میکنم . میتونید به اینصورت وارد کنید

      strtotime('+1 days'); یک روز بعد
      strtotime('-1 days'); یک روز قبل
      که یکروز بعد رو بصورت تایم استمپ برگشت میده که میتونید با تابع date به عنوان پارامتر دوم پاس بدید تا تاریخ دقیق رو بصورت رشته خدمتتون برگشت بده .

      همچنین اگر یک زمان خاص رو میخوایین چند روز قبلشو محاسبه کنید پارامتر دوم رو هم میتونید ست کنید.

      strtotime('-10 day',1524505680);

      موفق باشید.

      پاسخ
      1. امیرحسین آقاجانی ۴ اردیبهشت ۱۳۹۷

        مشکلم حل شد!!! دستتون درد نکنه ♥️🙏🏻

        پاسخ
دوره های آموزشی

دانلود رایگان کتاب آموزش PHP

صفر تا صد PHP و MySQL را یکجا یاد بگیرید
همین الان دانلود کن
نگران نباشید. ایمیل‌های مزاحم نمی‌فرستیم
close-link