Windows.  Viruslar.  Noutbuklar.  Internet.  Idora.  Utilitalar.  Haydovchilar

Ko'rinib turibdiki, dasturchilar ko'pincha shunday qilishlari kerak sana va vaqt bilan ishlash. Eng oddiy misol - forumda xabar yuborilgan sana va vaqt. Va, albatta, bunday narsalarni amalga oshirish mumkin PHP, ayniqsa, imkoniyatlar mavjud PHP da sana va vaqt bilan ishlash juda ko'p.

Tegishli asosiy funktsiya PHP da sana va vaqt, - Bu time() funktsiyasi, bu o'tgan soniyalar sonini qaytaradi 01.01.1970 yarim tun(davrning tug'ilishi Unix):

aks-sado vaqti();
?>

Ushbu skriptni ishga tushirish orqali siz necha soniya o'tganini bilib olasiz 01.01.1970 yarim tun qo'ng'iroq paytigacha time() funktsiyalari skriptingizda.

Albatta, barcha dasturlash tillarida mavjud bo'lgan ushbu asosiy funktsiyaga qo'shimcha ravishda sana va vaqt bilan ishlash(hech bo'lmaganda men bilganlar orasida) deb nomlangan yana bir funktsiya mavjud getdate():

$datetime = getdate();
foreach ($datetime sifatida $k=>$v)
echo "$k - $v
";
?>

Ushbu skriptni ishga tushirish orqali siz massivdagi kalitlar to'plamini va ularning tegishli qiymatlarini ko'rasiz (shu bilan birga, biz qurilishni takrorladik. har biriga). O'ylaymanki, endi sizga tegishli ma'lumotlarni topish qiyin bo'lmaydi sana va vaqt. Masalan, joriy vaqtni ko'rsatish uchun siz quyidagi kodni yozasiz:

$datetime = getdate();
echo $datetime["hours"]..":".$datetime["daqiqalar"]..":".$datetime["sekundlar"];
?>

Shuningdek getdate() funktsiyalari ixtiyoriy parametr mavjud bo'lib, u o'tgan soniyalar sonini bildiradi 01.01.1970 yarim tun. Bu funksiya nafaqat joriy vaqt va sanani, balki, umuman olganda, har qanday narsani qaytarishi uchun yaratilgan:

$datetime = getdate(152353232);
echo $datetime["yil"];
?>

Natijada siz ko'rasiz 1974 yil yil.

Shuningdek bor date() funktsiyasi. Men ma'lumotnomada uning tavsifini ko'rib chiqishni tavsiya qilaman, chunki bu funktsiya sana chiqish formatini belgilaydigan juda murakkab parametrni oladi. 30 dan bir oz ko'proq formatlash elementlari mavjud. Va quyidagi misolda men ulardan bir nechtasini beraman, qolganlarini esa ma'lumotnomada ko'rib chiqaman, chunki ularni yodlashning hojati yo'q, lekin ular bilan tanishish juda tavsiya etiladi. Ammo ulardan foydalanish tamoyilini va bu haqda quyidagi misolni bilish kerak:

echo date("Bugun d.m.Y H:i:s");
?>

Natijada siz shunga o'xshash narsani ko'rasiz: " Bugun 15.11.2010 21:44:24". Shuningdek date() funktsiyalari Belgilagan ikkinchi ixtiyoriy parametr ham mavjud vaqt tamg'asi, aynan shu vaqtdan beri o'tgan soniyalar soniga teng qiymat 01.01.1970 yarim tun. Ikkinchi parametrdan foydalanishga misol:

echo date("Bir vaqtlar d.m.Y H:i:s bor edi", 5393235329);
?>

Shuningdek bor gmdate() funktsiyasi, bu to'liq analogdir date() funktsiyalari, Lekin gmdate() funktsiyasi vaqtni skript ishlayotgan serverning vaqt zonasiga emas, balki shunga ko'ra ko'rsatadi Grinvich. Shubhasiz, ushbu funktsiyadan foydalangan holda siz foydalanuvchi ko'rgan sana va vaqt haqidagi barcha ma'lumotlarni saqlashingiz kerak va chiqishda siz har bir foydalanuvchining vaqt mintaqasiga moslashingiz kerak (ideal holda, albatta):

echo gmdate("Hozir Grinvichda D M j H:i:s T Y")
?>

Natijada siz shunga o'xshash narsani ko'rasiz: " Dushanba 15 noyabr 18:52:45 GMT 2010"Albatta, siz boshqa sanani ko'rasiz, lekin shunga o'xshash formatda. Shuningdek, men sizga ma'lumotnomaga kirib, boshqa sana va vaqt elementlari bilan tanishishingizni tavsiya qilaman. PHP(Men faqat uchdan birini berdim), chunki date() va gmdate() funksiyalari- bu eng oson va tezkor usul sana va vaqtni oling deyarli har qanday formatda.

Keling, PHP da sana va vaqt bilan qanday ishlashni ko'rib chiqaylik.

VaqtUnix- kompyuterlar

Unix kompyuterlari uchun vaqt 1970-yil 1-yanvar yarim tunda boshlanadi. Har qanday sana 1970 yil 1 yanvardan boshlab o'tgan soniyalar soni (vaqt tamg'asi bilan belgilanadi) sifatida hisoblanadi. Ushbu konventsiyalar PHP da ham qo'llaniladi. Misol uchun, biz bir kun oldinga borishni xohlaymiz. Keyin joriy qiymatga 60×60×24 soniya vaqt tamgʻasini qoʻshishingiz kifoya.

Bu vaqtni kuzatish sxemasi sanalar bilan operatsiyalarni sezilarli darajada osonlashtiradi. Misol uchun, agar bir vaqt tamg'asi qiymati boshqasidan katta bo'lsa, birinchi qiymat ikkinchisidan kechroq sanaga to'g'ri keladi.

Vaqt birliklari sekundiga

Joriy vaqt olinmoqda

PHP da joriy vaqt tamg'asi qiymatini olish uchun siz time() funksiyasini parametrlarsiz chaqirishingiz kerak, masalan:

Ko'pgina PHP sana va vaqt funksiyalari argument sifatida vaqt tamg'asi qiymatini oladi. Masalan, date() funksiyasi belgilangan formatga muvofiq formatlangan sana qatorini qaytaradi, masalan:

Yaratilishvaqt tamg'asi sana bo'yicha

Funktsiyamktime() Agar siz soat, daqiqa, soniya, oy kuni, oy va yilni belgilasangiz, vaqt tamg'asi yaratadi:

Funktsiyastrtotime()

Funktsiya ingliz tilida ibora sifatida ko'rsatilgan sana uchun vaqt tamg'asini yaratadi, masalan, 1 aprel yoki juma.

Sana qiymati YYYY-MM-DD formatida ko'rsatilishi kerak. Agar strtotime funksiyasi sanani o'zgartira olmasa, u noto'g'ri qaytaradi.

Funktsiyadan foydalanishga misollarsana()

O'rnatilgan funktsiya floor() natijaning kasr qismini yo'q qilish uchun ishlatiladi.

Birinchi o'qishda quyidagi matnni o'tkazib yuborishingiz mumkin

Ma'lumotlar bazalarida sana formatlariMySQL

PHP-dagi vaqt tamg'asi formati MySQL DBMSdagi vaqt tamg'asi formatiga mos kelmaydi.

MySQL-da sana va vaqt maydonlarining uch turi mavjud: DATA (sana), TIME (vaqt), DATETIME (sana va vaqt). DATETIME kabi ishlaydigan maxsus TIMESTAMP ma'lumotlar turi ham mavjud, lekin jadval yozuvlari kiritilganda yoki yangilanganda avtomatik ravishda joriy vaqtga yangilanadi.

PHP formatidagi vaqt tamg'asini MySQL formatiga aylantirish uchun siz quyidagi koddan foydalanishingiz mumkin:

Sana("Y-m-d H:i:s", $vaqt belgisi)

Masalan, sana va vaqt sifatida “2008-10-01 13:23:40” dan foydalanishimiz mumkin.

SELECT soʻrovidan PHP vaqt tamgʻasini olish uchun siz UNIX_TIMESTAMP() SQL funksiyasidan foydalanishingiz kerak:

Jadvaldan UNIX_TIMESTAMP(sana) ni tanlang

MySQL-da sana va vaqt bilan ishlash uchun boshqa ko'plab foydali funktsiyalar mavjud.

PHP da sanalar bilan ishlash uchun turli funksiyalardan foydalaniladi. Biz funktsiyadan o'rganishni boshlaymiz vaqt.

Vaqt funksiyasi, vaqt tamg'asi formati

Funktsiya vaqt orasidagi farqni soniyalarda qaytaradi 1970 yil 1 yanvar Va vaqtning joriy momenti. Ushbu sanani ko'rsatish format deb ataladi vaqt tamg'asi.

Nega sizga vaqt tamg'asi kerak?

Vaqt formatida vaqt tamg'asi soniyalarda sanalar orasidagi farqni topish uchun ishlatiladi.

Misol uchun, menda vaqt tamg'asi bor Joriy yilning 1 yanvari va vaqt tamg'asi hozirgi vaqt uchun. Men birini boshqasidan ayirib, bu daqiqalar orasidagi farqni olaman soniyalarda. Men bu farqni 60 ga bo'laman va farqni daqiqalarda olaman (chunki bir daqiqada 60 soniya bor). Men uni yana 60 ga bo'laman va farqni soatlarda olaman. Va hokazo.

Funktsiyadan foydalanish vaqt biz faqat hozirgi lahzani vaqtida olishimiz mumkin. Vaqt tamg'asini olish uchun har qanday sana funksiyasidan foydalanish kerak mktime:

mktime funktsiyasi

Funktsiya mktime funksiyasiga o'xshash ishlaydi vaqt, lekin undan farqli o'laroq, parametrlarni oladi: mktime (soat, daqiqa, soniya, oy, kun, yil)(iltimos, shuni yodda tuting oy va kun teskari). Ish misollarini ko'rib chiqing:

Parametrlar oxiridan o'tkazib yuborilishi mumkin. Agar biz yilni (oxirgi parametr) yozmasak, joriy yil avtomatik ravishda olinadi, agar kunni ham yozmasak (oxirgi parametr) joriy kun va joriy yil olinadi. Va hokazo:

Keling, odatiy hal qilaylik vazifa yoqilgan vaqt Va mktime. Keling, topishimiz kerak soniyalardagi farq 2000-yil 1-fevraldagi joriy vaqt va kunduzi (12 soat, 0 daqiqa, 0 soniya) (fevral - 2-oy):

Natijada soniyalardagi farq quyidagicha ko'rinadi: 612717139 (sahifani yangilang va bu raqam o'zgaradi).

Format nima ekanligini bilish bilan qurollangan vaqt tamg'asi(keyinroq kerak bo'ladi), keling, sanalar bilan ishlash uchun foydaliroq funktsiyalarni o'rganamiz, masalan, sana funktsiyasi.

sana funktsiyasi

Funktsiya sana belgilangan formatda joriy sana va vaqtni ko'rsatadi.

Format boshqaruv buyruqlari (ingliz harflari) bilan belgilanadi va ular orasiga har qanday ajratgichlarni (defis, ikki nuqta va hokazo) qo'yishingiz mumkin.

Jamoalar (bosh harflar oddiy harflardan farq qiladi, Eslatma!):

  • U- 1970 yil 1 yanvardan boshlab o'tgan soniyalar soni (ya'ni vaqt belgisi).
  • z– yil boshidan kun raqami.
  • Y– yil, 4 ta raqam.
  • y- yil, ikki raqam.
  • m– oy raqami (boshlovchi nol bilan).
  • n– bosh nolsiz oy raqami.
  • d- oydagi kunning soni, har doim ikkita raqam (ya'ni, birinchisi nolga teng bo'lishi mumkin).
  • j– bosh nolsiz oydagi kun soni.
  • w– haftaning kuni (0 - yakshanba, 1 - dushanba va boshqalar).
  • h- 12 soatlik formatdagi soat.
  • H- 24 soatlik formatdagi soat.
  • i- daqiqa.
  • s- soniya.
  • L– Kabisa yili bo‘lsa 1, kabisa yili bo‘lmasa 0.
  • V– yil haftasining seriya raqami.
  • t– belgilangan oydagi kunlar soni.

Sana bilan ishlashga misollar:

Sana funksiyasining ikkinchi parametri

Funktsiya sana soniya bor ixtiyoriy parametr, bu vaqt tamg'asi formatida vaqt nuqtasini oladi. Agar siz ushbu parametrdan o'tsangiz, sana funksiyasi vaqtning joriy nuqtasini emas, balki ikkinchi parametr sifatida o'tgan vaqtni formatlaydi. Bu vaqt tamg'asi orqali, masalan, olish mumkin mktime(lekin shart emas):

Bu ma'lum bir sana uchun hafta kunining sonini aniqlash uchun ishlatilishi mumkin - biz uni shunchaki funktsiyadan foydalanib ikkinchi parametr sifatida o'tkazamiz. mktime, va boshqaruv belgisini birinchi parametr sifatida o'rnating "w":

strtotime funktsiyasi

Biz ko'rib chiqadigan keyingi foydali funksiya strtotime deb ataladi.

Funktsiya strtotime- bu mktime funktsiyasining analogidir (u vaqt tamg'asini ham qaytaradi), faqat undan farqli o'laroq, u sanani oladi Ko'proq bepul format.

Misol uchun, men uni satrdan o'tkazishim mumkin "2025-12-31" va funktsiyaning o'zi yil qayerda, oy qayerda va kun qayerda ekanligini aniqlaydi va bu sanani vaqt tamg'asi formatida qaytaradi.

Yana nima qila olasiz: shunday yozishingiz mumkin - strtotime("hozir")- va biz hozirgi lahzani o'z vaqtida olamiz, yoki shunga o'xshash - strtotime("keyingi dushanba")- va biz keyingi dushanbani olamiz (dushanba ingliz tilida "dushanba").

Barcha formatlarni ko'rish mumkin.

Ishga misollar:

Quyidagi kod oldingi dushanba kunini qaytaradi:

Sanani qanday qo'shish yoki ayirish

Sanaga ma'lum vaqtni ayirish yoki qo'shish uchun siz uchta funktsiyaning kombinatsiyasidan foydalanishingiz kerak: date_create - u ish sanasini tayyorlaydi (sana yil-oy-kun formatida bo'lishi kerak) deb ataladigan narsani yaratadi. sana ob'ekti, uning yordamida keyingi manipulyatsiyalar amalga oshiriladi, date_modify - qo'shadi yoki ayiradi, sana_format - olingan sanani berilgan formatda ko'rsatadi. Ushbu funktsiyalar bilan qanday ishlashni tushunish uchun quyidagi misollarni o'rganing.

1-misol

Keling, sanasi 2025 yil, 12 oy, 31 kun bo'lgan ob'ekt yaratamiz, keyin unga 1 kun qo'shamiz va uni "kun.oy.yil" formatida chiqaramiz.

Kodni bajarish natijasi:

2-misol

Keling, sanasi 2025 yil, 12 oy, 31 kun bo'lgan ob'ekt yaratamiz, keyin unga 3 kun qo'shamiz va uni "kun.oy.yil" formatida chiqaramiz.

Kodni bajarish natijasi:

3-misol

Keling, sanasi 2025 yil, 12 oy, 31 kun bo'lgan ob'ekt yaratamiz, keyin unga 3 kun va 1 oy qo'shamiz va uni "kun.oy.yil" formatida chiqaramiz.

Kodni bajarish natijasi:

4-misol

Keling, sanasi 2025 yil, 1 oy, 1 kun bo'lgan ob'ekt yaratamiz, keyin undan 1 kunni ayirib, uni "kun.oy.yil" formatida chiqaramiz.

Kodni bajarish natijasi:

Keyinchalik nima qilish kerak:

Quyidagi havoladan foydalanib muammolarni hal qilishni boshlang: dars uchun muammolar.

Hamma narsani hal qilganingizda, yangi mavzuni o'rganishga o'ting.

OOPga kirish

  • Dars raqami.
    new.code.mu bilan yangi tab
    Kirish
  • Dars raqami.
    new.code.mu bilan yangi tab
    Xususiyatlari
  • Dars raqami.
    new.code.mu bilan yangi tab
    Usullari
  • Dars raqami.
    new.code.mu bilan yangi tab
    Properties va $this
  • Dars raqami.
    new.code.mu bilan yangi tab
    Methods va $this
  • Dars raqami.
    new.code.mu bilan yangi tab
    davlat xususiy
  • Dars raqami.
    new.code.mu bilan yangi tab
    Konstruktor
  • Dars raqami.
    new.code.mu bilan yangi tab
    Qabul qiluvchilar sozlagichlari
  • Dars raqami.
    new.code.mu bilan yangi tab
    Faqat o'qish uchun xususiyatlar
  • Dars raqami.
    new.code.mu bilan yangi tab
    Bitta sinf - bitta fayl
  • Dars raqami.
    new.code.mu bilan yangi tab
    Massivdagi ob'ektlar
  • Dars raqami.
    new.code.mu bilan yangi tab
    Konstruktordagi boshlang'ich mulk qiymatlari

Sana va vaqt bilan ishlash uchun PHP kengaytmasi ko'plab muammolarni hal qilish imkonini beruvchi sinflar to'plamidir. Ushbu funktsiyalar 5.2 versiyasidan boshlab mavjud bo'lib, ularning har biri real vaqt rejimida stsenariyni ko'rsatadigan bir nechta sinflar joriy etildi:

Sana va vaqt DateTime obyekti yordamida ifodalangan.

Vaqt mintaqasi DateTimeZone yordamida taqdim etilgan.

DateInterval ob'ektlari vaqt oralig'ini ifodalaydi. Masalan, joriy vaqtdan boshlab 2 kun yoki soatni hisoblashimiz kerak bo'lganda. Bu ob'ekt ma'lum bir vaqtga asoslanmagan, u oddiygina intervaldir.

DatePeriod ikki sana orasidagi davrni bildiradi.

Endi biz yuqoridagilarning haqiqiy qo'llanilishini ko'rib chiqamiz.

Date() va DateTime

Agar biz foydalanadigan sanani olishimiz kerak bo'lsa sana(), bu oddiy va u ishlaydi. Faqat kerakli sana formatini o'tkazing. Ammo bu amalda mutlaqo qulay emas, masalan, vaqt mintaqasiga qarab vaqtni o'zgartirish kerak bo'lganda.

DateTime faqat sanani qaytarishdan ko'proq narsani qiladi. Buni ishlatishdan oldin yangi DateTime obyektini yaratishingiz kerak. Bu boshqa PHP sinfidagi kabi amalga oshiriladi:

$date = yangi DateTime();

DateTime konstruktori parametr sifatida satrni oladi, hozirda satr bo'sh, joriy sana va vaqt sukut bo'yicha o'rnatiladi.

Muayyan sanani yaratish uchun siz konstruktorga shart topshirishingiz kerak. Quyida ulardan ba'zilarini ko'rishingiz mumkin, ular juda aniq:

Yangi DateTime("2013-yil, 24-mart") //DateTime 2013-yil 24-martda koʻrsatiladi yangi DateTime("2013-03-24") //Sana va vaqt 2013-yil 24-martda yangi DateTime("+2 kun") // 2-kun, bugungi yangi DateTime("ertaga") // ertangi kundan boshlab

Mavjud formatlarning to'liq ro'yxatini rasmiy hujjatlarda topish mumkin.

Agar mos vaqt formatini topmasangiz, uni o'zingiz yordamida aniqlashingiz mumkin DateTime::createFromFormat.

Endi bizning qo'limizda tayyor DateTime ob'ekti bor, biz juda ko'p qiziqarli narsalarni qila olamiz.

Unix vaqt tamg'asi

$date->getTimestamp();

Sana va vaqtni o'zgartirish

$date->setDate(2013, 12, 30); //yyyy, mm, dd ma'lum bir sanani o'rnatadi $date->setTime(12, 3, 20); //hh, mm, ss (ixtiyoriy) vaqtni o'rnatadi $date->modify("ertaga"); // ertaga siz buni shunday o'rnatishingiz mumkin! $date->setTimestamp(1364798550); // unix markasi yordamida sana va vaqtni o'rnatish

Shuni ta'kidlash kerakki, agar biz qabul qilinadigan parametrlardan yuqoriroq parametrlarni o'tkazsak, PHP ularni avtomatik ravishda mos ravishda o'zgartiradi. Masalan, $date->setDate(2013, 12, 35); 2014-01-04 qaytib keladi, vaqt uchun bir xil.

Bir nechta sanalar bilan ishlash

Endi siz DateTime bilan tanishganingizdan so'ng, ilovalaringiz sodda va aqlliroq bo'ladi. Umid qilamizki, siz xurmolarni har qachongidan ham yaxshi ko'rasiz.

Endi biz ba'zi matematik hisoblar bilan ishlashni ko'rib chiqamiz. Aytaylik, ikkita tug'ilgan sanani solishtirishimiz kerak:

$sheldon = new DateTime("20-may, 1980-yil"); $neo = yangi DateTime ("1962 yil 11 mart"); if ($sheldon > $neo) echo "Sheldon neodan yoshroq";

Buni boshqa skript yordamida amalga oshirish mumkin. Mana bunday:

$diff = $neo->diff($sheldon);

Funktsiyani chaqirish farq qaytadi Sana oralig'i ob'ekt. Bu qanday ko'rinishga ega:

DateInterval Object ([y] => 18 [m] => 2 [d] => 9 [h] => 0 [i] => 0 [s] => 0 => 0 => 6645)

Bular jamoat mulki. Ushbu ob'ekt asosida qiziqarli narsalarni yaratishingiz mumkin.

//Neo 18 yoshu 2 oyga katta $diff->format("Neo %Y yil va %m oyga katta");

Eng foydali tomoni shundaki, siz DateInterval obyektini boshqa shunga o'xshash DateInterval obyektiga qo'llashingiz mumkin.

$neo->add($diff); //neoning tug'ilgan kuni sheldonga o'zgartirildi

Esda tuting: DateTime-ni o'zgartirish, masalan, yuqoridagi holatda bo'lgani kabi, yangi ob'ektni qaytarmaydi, shunchaki eskisini o'zgartiradi. Ilovangiz bilan ishlashda buni yodda saqlang. PHP 5.5 o'zgartirilgandan so'ng yangi ob'ektni qaytaradigan yangi sinfni taqdim etdi.

Diff intervalli obyektni olishning yagona usuli emas. Bu sinf bo'lgani uchun odatdagidek yangi ob'ekt yaratilishi mumkin:

$new_diff = yangi DateInterval("P2Y");

Yillar, oylar, kunlar va boshqalar soni konstruktorga uzatiladi. Qo'shimcha ma'lumotni konstruktor haqidagi hujjatlarda topishingiz mumkin.

Vaqt zonalari bilan ishlash

Yangi DateTime obyektini yaratishda ikkinchi argument vaqt mintaqasini belgilaydi. Agar biz ushbu argumentni o'tkazib yuborsak, vaqt mintaqasi php.ini date.timezone dan olinadi. Buni tezda qo'ng'iroq qilish orqali o'zgartirishingiz mumkin sana_default_timezone_set:

Sana_default_timezone_set("Amerika/Nyu_York"); new DateTime ("bugun"); //datetime ob'ekti Nyu-York vaqt mintaqasiga o'zgartirildi

Vaqt mintaqasini DateTimeZone obyekti yordamida ham o'zgartirishingiz mumkin:

$timezone = new DateTimeZone("Amerika/Nyu_York"); $sheldon->setTimezone($timezone); // Nyu-York vaqti bo'yicha Sheldonning tug'ilgan kuni

DateTime obyektini yaratishda siz vaqt mintaqasini belgilashingiz mumkin:

$sheldon = new DateTime("1980 yil 20-may", $timezone);

Shuni yodda tutish kerakki, setTimezone asl DateTime obyektini o'zgartiradi. Biz ushbu sanani vaqt zonasiga muvofiq o'zgartirishni so'raymiz. Boshqa tomondan, oxirgi misolda biz konstruktorga vaqt mintaqasini uzatdik va "Men yaratayotgan sana shu vaqt mintaqasida" deb aytdik.

Mavjud vaqt zonalari ro'yxati hujjatlarda mavjud.

Sana va vaqt davrlari

Menimcha, rasmiy hujjatlar eng aniq tushuntirishlarni beradi:

Berilgan vaqt oralig'ida teng vaqt oralig'ida harakat qilish imkonini beradi.

Sana Davr ma'lum oraliqda, belgilangan vaqt oralig'ida vaqtlar to'plamini hosil qiladi. Biz boshlanish sanasini, intervalni va tugash sanasini o'tkazishimiz kerak. Har bir interval uchun yangi DateTime obyekti yaratiladi.

Aytaylik, biz Sheldonning tug'ilgan kunidan boshlab barcha tug'ilgan kunlarini olishni xohlaymiz:

//tug'ilgan kunlar yiliga bir marta bo'lgani uchun interval bir yil bo'ladi $interval = new DateInterval("P1Y"); //uchinchi argument - tugash sanasi, new DateTime() == hozir $period = new DatePeriod($sheldon, $interval, new DateTime()); foreach($period as $dt) ( //DateTime obyekti echo $dt->format("Y-m-d - D"), "\n"; )

Natija quyidagicha bo'ladi:

1981-05-20 - Chorshanba 1982-05-20 - Pay 1983-05-20 - Juma 1984-05-20 - Yakshanba 1985-05-20 - Dushanba 1986-05-20 - Seshanba ...

Endi davrlar boshlanish sanasini ham o'z ichiga oladi. Konstruktorga to'rtinchi argumentni yuborish orqali uni yo'q qilishingiz mumkin:

$davr = yangi SanaPeriod($sheldon, $interval, yangi DateTime(), DatePeriod::EXCLUDE_START_DATE);

Keling, Neo Sheldon tug'ilishidan oldin tug'ilgan kunini necha marta nishonlaganini ko'rib chiqaylik:

$bdays = new DatePeriod($neo, $interval, $sheldon, DatePeriod::EXCLUDE_START_DATE); echo iterator_count($bdays);

Kengaytma

Bugun biz ko'rib chiqqan barcha darslar o'z usullari bilan kengaytirilishi mumkin. Funktsiyani yaratishning eng keng tarqalgan usuli __toString bu sizga DateTime ob'ektini formatni chaqirmasdan ko'rsatishga imkon beradi.

Nima yana?

Ko'rib turganingizdek, bu datetime kengaytmasi juda ko'p imkoniyatlarni taqdim etadi. PHP ning so'nggi versiyalarida yangi sinflar mavjud, shunchaki hujjatlarga qarang.

PHP da sana va vaqtdan foydalanishning yaxshi misollari bormi? Quyidagi izohlarda ularni baham ko'ring! O'qiganingiz uchun barchaga rahmat.


(PHP 4, PHP 5, PHP 7)

sana - Tizim sanasi/vaqt chiqishini formatlaydi

Tavsif

String sana (string $format [, int $vaqt tamg'asi = vaqt() ])

Belgilangan format namunasiga muvofiq formatlangan qatorni qaytaradi. Vaqt tamg'asi argumenti tomonidan belgilangan vaqt tamg'asi yoki vaqt tamg'asi belgilanmagan bo'lsa, joriy tizim vaqti ishlatiladi. Shunday qilib, vaqt tamg'asi ixtiyoriy va funksiya tomonidan qaytarilgan qiymatga sukut bo'yicha vaqt().

Parametrlar ro'yxati

Natija satr namunasi ( ip) sana bilan. Quyidagi formatlash variantlarini ko'ring. Bundan tashqari, ushbu parametrlar o'rniga ishlatilishi mumkin bo'lgan bir nechta oldindan belgilangan sana/vaqt konstantalari mavjud. Masalan: DATE_RSS shablonni almashtiradi "D, d M Y H:i:s".

Quyidagi belgilar format parametrida tan olinadi
Format qatoridagi belgi Tavsif Qaytish qiymati misoli
kun --- ---
d Oyning kuni, boshida nol bo'lgan 2 ta raqam dan 01 oldin 31
D Hafta kunining matn ko'rinishi, 3 ta belgi dan dus oldin Quyosh
j Nolsiz oyning kuni dan 1 oldin 31
l(kichik "L") Hafta kunining to'liq nomi dan yakshanba oldin shanba
N ISO-8601 standartiga muvofiq hafta kunining tartib raqami (PHP 5.1.0 da qo'shilgan) dan 1 (dushanba) gacha 7 (Yakshanba)
S Oy kunining tartib raqami uchun inglizcha qo'shimcha, 2 belgi st, nd, rd yoki th. Bilan birga ishlatiladi j
w Hafta kunining seriya raqami dan 0 (yakshanba) gacha 6 (shanba)
z Yildagi kunning seriya raqami (0 dan boshlab) Kimdan 0 oldin 365
Bir hafta --- ---
V ISO-8601 standartiga muvofiq yil haftasining seriya raqami; haftalar dushanba kuni boshlanadi (PHP 4.1.0 da qo'shilgan) Masalan: 42 (yilning 42-haftasi)
Oy --- ---
F To'liq oy nomi, masalan, yanvar yoki mart dan Yanvar oldin dekabr
m Bosh nol bilan oy seriya raqami dan 01 oldin 12
M Oyning qisqartirilgan nomi, 3 ta belgi dan Yanvar oldin dekabr
n Nolsiz oy seriya raqami dan 1 oldin 12
t Belgilangan oydagi kunlar soni dan 28 oldin 31
Yil --- ---
L Kabisa yili belgisi 1 , agar yil kabisa yili bo'lsa, aks holda 0 .
o ISO-8601 standartiga muvofiq yil raqami. bilan bir xil ma'noga ega Y, ISO hafta raqami ( V) oldingi yoki keyingi yilga tegishli; keyin o'sha haftaning yili ishlatiladi. (PHP 5.1.0 da qo'shilgan) Misollar: 1999 yoki 2003
Y Yilning seriya raqami, 4 ta raqam Misollar: 1999 , 2003
y Yil raqami, 2 ta raqam Misollar: 99 , 03
Vaqt --- ---
a Kichik harf bilan Ante meridiem (inglizcha: “before noon”) yoki Post meridiem (inglizcha: “after peshin”) am yoki pm
A Ante meridiem yoki katta harfda Post meridiem A.M. yoki P.M.
B Internet vaqt formatidagi vaqt (kun vaqtini hisoblash uchun muqobil tizim) dan 000 oldin 999
g Soat 12 soatlik formatda bosh nolsiz dan 1 oldin 12
G Soat 24 soatlik formatda bosh nolsiz dan 0 oldin 23
h Bosh nol bilan 12 soatlik formatda soat dan 01 oldin 12
H Bosh nol bilan 24 soatlik formatda soat dan 00 oldin 23
i Boshlovchi nol bilan daqiqalar dan 00 oldin 59
s Bosh nol bilan soniyalar dan 00 oldin 59
u Mikrosoniyalar (PHP 5.2.2 da qo'shilgan). Shuni esda tuting sana() har doim qaytib keladi 000000 , chunki u butun sonni qabul qiladi ( butun son) parametr, holbuki DateTime::format() mikrosoniyalarni qo'llab-quvvatlaydi. Masalan: 654321
Vaqt zonasi --- ---
e Vaqt mintaqasi shkalasi kodi (PHP 5.1.0 da qo'shilgan) Misollar: UTC, GMT, Atlantika/Azor orollari
I(kapital i) Yozgi vaqt belgisi 1 , agar sana yoz vaqtiga to'g'ri kelsa, 0 aks holda.
O Grinvich vaqti bilan farq, soatlarda Masalan: +0200
P Grinvich o'rtacha vaqtidan farqi ikki nuqta bilan soatlar va daqiqalar orasidagi farq (PHP 5.1.3 da qo'shilgan) Masalan: +02:00
T Vaqt mintaqasining qisqartmasi Misollar: est, MDT ...
Z Vaqt mintaqasi soniyalarda ofset. UTC dan g'arbda joylashgan vaqt zonalari uchun manfiy raqamlar, UTC dan sharqda joylashganlar uchun esa ijobiy raqamlar qaytariladi. dan -43200 oldin 50400
To'liq sana/vaqt --- ---
c ISO 8601 formatidagi sana (PHP 5 da qo'shilgan) 2004-02-12T15:19:21+00:00
r Sana » RFC 2822 formatida Masalan: Payshanba, 21 dekabr 2000 16:01:07 +0200
U Unix Epoch boshlanganidan beri o'tgan soniyalar soni (The Unix Epoch, 1970 yil 1 yanvar 00:00:00 GMT) Shuningdek qarang vaqt()

Naqsh qatorida uchragan boshqa belgilar natija qatorida o'zgarmagan holda chop etiladi. Z har doim qaytadi 0 foydalanish gmdate().

Izoh:

Ko'rib chiqilayotgan funktsiya kabi vaqt belgilarini olganligi sababli butun son, formatlash belgisi u faqat funksiyadan foydalanganda foydali bo'ladi sana_format() va funksiya yordamida yaratilgan maxsus vaqt belgilari date_create().

vaqt tamg'asi

Ixtiyoriy vaqt tamg'asi parametri butun son vaqt tamg'asi, agar vaqt tamg'asi belgilanmagan bo'lsa, sukut bo'yicha joriy mahalliy vaqt. Boshqacha qilib aytganda, standart qiymat funktsiya natijasiga teng vaqt().

Qaytariladigan qiymatlar

Formatlangan sana qatorini qaytaradi. Raqamli bo'lmagan qiymatni parametr sifatida o'tkazishda vaqt tamg'asi qaytariladi FALSE va darajadagi xatolik yuzaga keladi E_OGOHLANTIRISH.

O'zgarishlar ro'yxati

Versiya Tavsif
5.1.0 Vaqt belgilarining amal qilish muddati odatda 1901 yil 13 dekabr 20:45:54 GMT dan 2038 yil 19 yanvar 03:14:07 GMT gacha. (Ular 32 bitli imzolangan butun sonning minimal va maksimal qiymatiga mos keladi). Biroq, ba'zi operatsion tizimlarda (masalan, Windows) 5.1.0 dan past bo'lgan PHP versiyalari uchun bu diapazon 01-01-1970 dan 01-19-2038 yilgacha cheklangan edi.
5.1.0

Vaqt zonalari bilan bog'liq xatolar endi darajadagi xatolarni keltirib chiqaradi E_STRICT Va E_NOTICE.

5.1.1 Standart sana/vaqt formatlari uchun format parametri sifatida ko'rsatilishi mumkin bo'lgan maxsus konstantalar mavjud.

Misollar

1-misol Funktsiyadan foydalanish misollari sana()

// standart vaqt mintaqasini o'rnating. PHP 5.1 dan beri mavjud
sana_default_timezone_set("UTC");

// shunday chiqadi: dushanba
echo sana ("l");

// shunday chiqadi: 2005-yil 8-avgust, dushanba, 15:12:46
echo sana ("l jS \of F Y h:i:s A" );

// chiqadi: 2000-yil 1-iyul, shanba kuni
echo "2000-yil 1-iyul kuni". sana("l", mktime(0, 0, 0, 7, 1, 2000));

/* formatlash parametri sifatida doimiydan foydalanishga misol */
// shunday chiqadi: Chorshanba, 25-sentabr 2013 15:28:57 -0700
echo sanasi (DATE_RFC2822);

// shunday chiqadi: 2000-07-01T00:00:00+00:00
echo sana(DATE_ATOM, mktime(0, 0, 0, 7, 1, 2000));
?>

Belgini formatlash belgisi sifatida tanib olishning oldini olish uchun siz teskari chiziq yordamida undan qochishingiz kerak. Agar o'chirilgan belgi ham formatlash ketma-ketligi bo'lsa, u yana qochish kerak.

2-misol Funksiyadagi belgilardan qochish sana()

// shunday chiqadi: chorshanba, 15
echo sana ("l \t\h\e jS");
?>

O'tmish va kelajak sanalarni ko'rsatish uchun funksiyalardan foydalanish qulay sana() Va mktime().

3-misol Xususiyatlar almashish misoli sana() Va mktime()

$tomorrow = mktime (0 , 0 , 0 , sana ("m" ) , sana ("d" )+ 1 , sana ("Y" ));
$o'tgan oy = mktime (0 , 0 , 0 , sana ( "m" ) - 1 , sana ( "d" ), sana ( "Y" ));
$kelgusi yil = mktime (0 , 0 , 0 , sana ( "m" ), sana ( "d" ), sana ( "Y" )+ 1 );
?>

Izoh:

Bu usul vaqt tamg'asiga soniyalarni ayirish va qo'shishdan ko'ra ishonchliroqdir, chunki agar kerak bo'lsa, yoz/qish vaqtiga moslashuvchan o'tish imkonini beradi.

Funktsiyadan foydalanishning yana bir qancha misollari sana(). Shuni ta'kidlash kerakki, siz o'zgarishsiz qoldirmoqchi bo'lgan belgilardan qochishingiz kerak. Bu PHP ning joriy versiyasi formatlash deb tan olmaydigan belgilar uchun ham amal qiladi, chunki bu keyingi versiyalarda kiritilishi mumkin. Qochish ketma-ketligidan qochish uchun (masalan, \n) bitta tirnoqdan foydalaning.

4-misol yordamida formatlash sana()

// Faraz qilaylik, joriy sana 2001 yil 10 mart, 17:16:18,
// va biz Tog' standart vaqti (MST) vaqt mintaqasidamiz

$bugun = sana ("F j, Y, g:i a" ); // 2001 yil 10 mart, 17:16
$bugun = sana ("m.d.y"); // 03.10.01
$bugun = sana ("j, n, Y" ); // 10, 3, 2001 yil
$bugun = sana ("Ymd"); // 20010310
$bugun = sana ("h-i-s, j-m-y, u w Day" ); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$bugun = sana ("\i\t \i\s \t\h\e jS \d\a\y."); // 10-kun.
$bugun = sana ("D M j G:i:s T Y" ); // 10-mart, 17:16:18 MST 2001 yil
$bugun = sana ("H:m:s \m \i\s\ \m\o\n\t\h"); // 17:03:18 m - oy
$bugun = sana ("H:i:s"); // 17:16:18
$bugun = sana ("Y-m-d H:i:s" ); // 2001-03-10 17:16:18 (MySQL DATETIME formati)
?>

Sanalarni boshqa tillarda formatlash uchun uning oʻrniga foydalaning sana() funktsiyalari setlocale() Va strftime().

Eslatmalar

Izoh:

Sana satrli tasviridan vaqt tamg'asini olish uchun siz funksiyadan foydalanishingiz mumkin strtotime(). Bundan tashqari, ba'zi ma'lumotlar bazalarida sananing ichki ko'rinishini vaqt tamg'asiga aylantirish uchun o'z funktsiyalari mavjud (masalan, MySQL » UNIX_TIMESTAMP funktsiyasi).

Agar xatolikni sezsangiz, matn qismini tanlang va Ctrl+Enter tugmalarini bosing
ULOSING: