годинник

Дещо про дати в PHP

навчальний матеріал

Травень 2015

Питання розділу

  1. Як отримати час та дату в php?
  2. Як змінити формат виведення даних дати?
  3. Який тип даних часу?
  4. Які символи використовуються для створення формату дати?
  5. Як отримати час з бази даних?
  6. Які операції можна виконати над даними часу?
  7. Як вирахувати різницю дат?

Про створення часу та дати в PHP

Досить часто приходиться мати справу з датами при розробці деяких веб-проектів і в PHP для цього застосовується досить багато функцій часу та дати, наприклад:
date() - повертає локальні часові дані;
time() - повертає значання часу з епохи Unix;
date_create() - створення об'єкту часу;
date_format() - повертає об'єкт згідно вказаного формату;
strtotime() - перетворює текстовий формат дати до штампу дати Unix;
date_diff() - функція вираховує різницю між датами;
більше про час та дату можна переглянути за навчальним ресурсом www.w3schools.com та за офіційним джерелом php.net

Я б відмітив би що при роботі з даними часу та дати варто враховувати тип цих даних. Тому як, що таке час? Цифрові дані - integer, строкові дані, об'єкт? І відповідно, яким чином проводити операції над даними часу, якщо це строкові дані чи об'єкт чи цифрові дані? Досить легко отримати помилку при виконанні скрипту кодування, якщо помилитись з типом даних дати, але переглянемо це на прикладах далі.

1. Застосування функції date():

date(format,timestamp);

де, format - є обов'язковим і може приймати слідуючі символи:

<?php
// Prints the day, date, month, year, time, AM or PM
echo date("l jS \of F Y h:i:s A");
?>

Результат роботи скрипту:

Thursday 25th of May 2017 08:05:55 AM

2. Зразок застосування функції date_create() та date_format():

<?php
$date=date_create("2013-03-15 23:40:00");
echo date_format($date,"Y/m/d H:iP ");
?>

Результат часу та дати можна вивести слідуючим чином:

2013/03/15 23:40+02:00
2013:03:15 23:40+02:00
2013.03.15 23.40+02:00
2013*03*15 23*40+02:00

3. Застосування функції time():

<?php
$t=time();
echo($t . "<br>");
echo(date("Y-m-d",$t));
?>

Результат скрипту в секундах з епохи Unix та в форматі Y-m-D:

1495688755
2017-05-25


Що ж до типу даних часу та дати? Object, string чи integer?

4. Щоб проаналізувати якими даними часу та дати ми оперуємо застосуємо функцію gettype()
проаналізуємо функцію date(), сьогоднішній день:

<?php
$d=date("Y-m-d");
echo $d."<br>";
echo "Тип даних дати є ".gettype ($d);
?>

Результат роботи скрипту:

2017-05-25
Тип даних дати є string

5. Який тип даних функції date_create?

<?php
$date=date_create("2013-03-15");
echo date_format($date,"Y/m/d ")."<br>";
echo "Тип даних дати є ".gettype ($date);
?>

Результат роботи скрипту:

2013/03/15
Тип даних дати є object

6. Строкові дані звичайно можна перетворити на цифровий тип даних...

<?php
$d1=strtotime("2015-04-10")
echo $d1;
echo "Тип даних дати є ".gettype ($d1);
?>

Результат роботи скрипту:

2015-04-10 це є 1428613200 секунд
Тип даних дати є integer

7. Який тип даних часу якщо ми їх візьмемо з Бази Даних?

<?php
$con = new mysqli("localhost", "user", "password", "DB_name");
$result = $con->query("SELECT start_date FROM project_Konkurs WHERE konkurs_id=1");
$row = $result->fetch_assoc();
echo "Початок конкурсу: " . $row['start_date']. "<br>";
echo "Тип даних дати є ".gettype ($d);
$con->close();
?>

Результат роботи скрипту:

Початок конкурсу: 2015-04-16
Тип даних дати є string

8. Як видно з наведених прикладів час та дата у нас можуть бути презентовані різними типами даних, тому, якщо необхідно провести арифметичну операцію, щось на зразок додати 5 днів, то легко отримати ось такі повідомлення:
операції з функцією часу date_create()

<?php
$date=date_create("2013-03-15");
$new_date=$date+5;
echo $date;
echo $new_date."<br>";
?>

Результат роботи скрипту:

Notice: Object of class DateTime could not be converted to int

8.1. Що ж до операції з даними з бази даних:

<?php
echo "Початок конкурсу: " . $row['start_date']. "<br>";
$new_date=$row['start_date']+5;
echo "Нова дата ". $new_date;
?>

Результат роботи скрипту:

Початок конкурсу: 2015-04-16
Нова дата 2020

9. А яким чином ми могли порахувати різницю дат?
наприклад, застосувавши функцію strtotime(), і секунди перевести до днів, ось так:

<?php
$date1="2013-03-15";
$date2="2013-03-20";
$interval=(strtotime($date2)-strtotime($date1))/(60*60*24);
echo "Нова дата ". $interval; ?>

Результат роботи скрипту:

Різниця складає 5 днів

10. Різницю дат можна порахувати застосувавши функцію date_diff()...

<?php
$date1=date_create("2013-03-15");
$date2=date_create("2013-03-20");
$diff=date_diff($date1,$date2);
echo $diff->format("Різниця складає %a днів"); ?>

Результат роботи скрипту:

Різниця складає 5 днів

Заключення

- Що ж на цьому короткий бріф вважаю завершений, найкращого в програмуванні :)

- Та слідкуйте за своїм часом, "Time is money!".

Анатолій