- Datetime ()
- Висновок форматованої дати
- Висновок позначки часу (timestamp)
- зміна часу
- Зміна мітки timestamp
- Як встановити часовий пояс
- Як додати дні до значення дати
- Порівняння двох дат
- Конвертація номера місяця й імені місяці
- Отримуємо кількість тижнів у місяці

Наша взаимовыгодная связь https://banwar.org/
Frontend розробник
Починаючи з версії 5.2 в PHP з'явився такий тип даних як DateTime. Спробуємо в цій статті розібратися чому краще використовувати його замість старих функцій date () і time ().
Функція date () використовується для строкового відображення дати / часу. Функція приймає два параметри, 1-ий - формат повертається рядка, а другий - саме значення дати. За замовчуванням другий параметр приймає значення поточного моменту часу, або можна вказати позначку часу в unix форматі (timestamp).
<? Php // Поточна дата echo date ( "Ymd", time ()); // 2013-12-01 echo date ( "Ymd", 1385925192);Функція time () повертає поточний час в unix форматі (timestamp).
<? Php // Поточний час, unix формат echo time ();Datetime ()
Об'єкт Datetime вперше був представлений в PHP версії 5.2, він містить в собі безліч допоміжних об'єктів, для вирішення проблем, з якими вам доводилося стикатися при використанні функцій date () і time (). Також був представлений об'єкт DateTimeZone, який управляє часовим поясом, об'єкт DateInterval відповідає інтервалу часу (наприклад 2 дні) від справжнього моменту, DatePeriod показує різницю в часі між двома різними датами. Основна перевага використання DateTime перед старими функціями полягає в тому, що значення дат простіше змінювати. Якщо ви хочете отримати значення часу і дати за допомогою функції date (), то ви напишіть наступне:
<? Php echo date ( "l jS \ of FY h: i: s A");А ось приклад для установки часового поясу:
<? Php date_default_timezone_set ( 'UTC'); echo date ( "l jS \ of FY h: i: s A");Проблема виникає при необхідності змінити або порівняти дві позначки часу, DateTime має методи modify () і diff () спрощують задачу. Переваги DateTime проявляються коли ви маніпулюєте значеннями дат.
Спочатку об'єкт треба ініціалізувати
<? Php $ date = new DateTime ();Конструктор цього класу приймає два параметри. Перший - значення часу, ви можете використовувати рядок у форматі функції date, час у форматі Unix, інтервал або період. Другий параметр - часовий пояс.
<? Php // Установка дати $ date = new DateTime ( '2000-01-01'); // Установка дати до часового поясу $ date = new DateTime ( '2000-01-01', new DateTimeZone ( 'Pacific / Nauru')); // Установка дати на 4 дні вперед $ date = new DateTime ( '+ 4 days');Висновок форматованої дати
Об'єкт DateTime може працювати також як і функція date, всього лише необхідно викликати метод format () вказавши формат повертається рядка.
<? Php echo $ date-> format ( 'Ym-d');Висновок позначки часу (timestamp)
Для виведення позначки часу в форматі Unix існує метод getTimestamp ().
~~~ {.php} <? Php
$ Date = new DateTime (); echo $ date-> getTimestamp ();
### Встановлення дати Незважаючи на те, що значення дати ви вказуєте при створенні об'єкта класу, ви можете пізніше змінювати це значення. ### Зміна дати Для зміни дати використовуйте метод `setDate ()`. ~~~ php <? Php $ date = new DateTime (); // 2001-02-03 $ date-> setDate (2001, 2, 3); echo $ date-> format ( 'Ym-d');зміна часу
Для зміни значення часу існує метод setTime ().
<? Php $ date = new DateTime (); // 2013-12-01 14:55:00 $ date-> setTime (14, 55); echo $ date-> format ( 'Ymd H: i: s');Зміна мітки timestamp
Для цього придуманий метод setTimestamp ().
<? Php $ date = new DateTime (); // 2013-11-28 19:13:19 $ date-> setTimestamp (1385665999); echo $ date-> format ( 'Ymd H: i: s');Як встановити часовий пояс
Другий параметр при створенні об'єкта - DateTimeZone, він дозволяє призначити часовий пояс нашого об'єкту. Це означає, що ми зможемо легко порівнювати два значення часу з різних часових поясів і отримувати коректну різницю.
<? Php // 2013-12-01 13: 45: 00 + 13: 45 $ date = new DateTime ( '2013-12-01', new DateTimeZone ( 'Pacific / Chatham')); echo $ date-> format ( 'Ymd H: i: sP');Також для установки цього значення існує метод setTimezone ().
<? Php $ date = new DateTime ( '2013-12-01'); // 2013-12-01 13: 45: 00 + 13: 45 $ date-> setTimezone (new DateTimeZone ( 'Pacific / Chatham')); echo $ date-> format ( 'Ymd H: i: sP'); // 2013-11-30 19: 00: 00-05: 00 $ date-> setTimezone (new DateTimeZone ( 'America / Toronto')); echo $ date-> format ( 'Ymd H: i: sP');Повний список часових поясів можна переглянути на php.net .
Як додати дні до значення дати
Для зміни значення дати в об'єкті DateTime можна використовувати метод modify (). Він приймає як параметр строкове значення днів, місяців, років. Наприклад, якщо хочете додати кілька днів, наприклад 3 дні, один місяць і один рік:
<? Php $ date = new DateTime ( '2013-12-01'); $ Date-> modify ( '+ 3 day'); // 2013-12-04 echo $ date-> format ( 'Ym-d'); $ Date = new DateTime ( '2013-12-01'); $ Date-> modify ( '+ 1 month'); // 2014-01-01 echo $ date-> format ( 'Ym-d');Порівняння двох дат
<? Php $ date1 = new DateTime ( 'May 13th, 1986'); $ Date2 = new DateTime ( 'October 28th, 1989'); $ Difference = $ date1-> diff ($ date2);Код вище дасть нам різницю двох дат у вигляді DateInterval.
DateInterval Object ([y] => 3 [m] => 5 [d] => 15 [h] => 0 [i] => 0 [s] => 0 [invert] => 0 [days] => 1264)Конвертація номера місяця й імені місяці
Досить часто доводиться отримувати ім'я місяці з його порядкового номера, для цього всього лише потрібно вказати формат "F" в якості першого параметра
<? Php $ monthName = date ( "F", mktime (0, 0, 0, $ monthNum));При використанні класу DateTime можна застосувати метод format ().
<? Php $ date = new DateTime ( '2000 -'. $ MonthNum .'- 01 '); $ MonthName = $ date-> format ( "F");Отримуємо кількість тижнів у місяці
Наступний приклад допоможе вам отримати кількість тижнів в певному місяці року.
<? Php function weeks_in_month ($ month, $ year) {$ startDate = new DateTime (); $ StartDate-> setDate ($ year, $ month, 1); $ LoopDate = $ startDate; $ Week = 1; for ($ i = $ startDate-> format ( 'd'); $ i <= cal_days_in_month (CAL_GREGORIAN, $ month, $ year); $ i ++) {if ($ loopDate-> format ( 'w')% 7 = = 0) {$ week ++; } $ LoopDate-> modify ( '+ 1 day'); } Return $ week; } Echo '<p> Jan' .weeks_in_month (1, 2014 року). '</ P>'; echo '<p> Feb' .weeks_in_month (2, 2014 року). '</ p>'; echo '<p> Mar' .weeks_in_month (3, 2014 року). '</ p>'; echo '<p> Apr' .weeks_in_month (4, 2014 року). '</ p>'; echo '<p> May' .weeks_in_month (5, 2014 року). '</ p>'; echo '<p> Jun' .weeks_in_month (6, 2014 року). '</ p>'; echo '<p> Jul' .weeks_in_month (7, 2014 року). '</ p>'; echo '<p> Aug' .weeks_in_month (8, 2014 року). '</ p>'; echo '<p> Sep' .weeks_in_month (9, 2014 року). '</ p>'; echo '<p> Oct' .weeks_in_month (10, 2014 року). '</ p>'; echo '<p> Nov' .weeks_in_month (11, 2014 року). '</ p>'; echo '<p> Dec' .weeks_in_month (12, 2014 року). '</ p>'; ?>Lt;?Lt;?
Lt;?
Lt;?
Lt;?
Lt;?
Lt;?
Lt;?
Lt;?
Lt;?