Операции с датами и временем Unixtime в PHP

Unix-время (англ. Unix time, также POSIX-время) — система описания моментов во времени. Определяется как количество секунд, прошедших с полуночи 1 января 1970 года.

В PHP текущую метку времени возвращает функция time() и функция strtotime(), также с unix-метками работает класс DateTime.

Число дня недели

// Понедельник текущей недели:
$time = strtotime('this week monday, 00:00');
echo date('d.m.Y H:i', $time); // 27.11.2023 00:00 

// Понедельник предыдущий недели:
$time = strtotime('previous week monday, 00:00');
echo date('d.m.Y H:i', $time); // 20.11.2023 00:00 

// Понедельник следующей недели:
$time = strtotime('next monday, 00:00');
echo date('d.m.Y H:i', $time); // 04.12.2023 00:00
PHP
* Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.

Числа месяца

Текущий месяц:

// Первый день текущего месяца:
$time = strtotime('first day of this month 00:00');
echo date('d.m.Y H:i:s', $time); // 01.11.2023 00:00:00 

// Последний день текущего месяца:
$time = strtotime('last day of this month 23:59');
echo date('d.m.Y H:i:s', $time); // 30.11.2023 23:59:00
PHP

Преведущий месяц:

// Первый день предыдущего месяца:
$time = strtotime('first day of previous month 00:00');
echo date('d.m.Y H:i:s', $time); // 01.10.2023 00:00:00 

// Последний день предыдущего месяца:
$time = strtotime('last day of previous month 23:59');
echo date('d.m.Y H:i:s', $time); // 31.10.2023 23:59:00
PHP

Следующий месяц:

// Первый день следующего месяца:
$time = strtotime('first day of next month 00:00');
echo date('d.m.Y H:i:s', $time); // 01.12.2023 00:00:00 

// Последний день следующего месяца:
$time = strtotime('last day of next month 23:59');
echo date('d.m.Y H:i:s', $time); // 31.12.2023 23:59:00
PHP

Число дней в текущем месяце

echo date('t'); // 30
PHP

Порядковый номер недели

echo date('W'); // 48
PHP

Число дней в текущем году

echo date('L') ? 366 : 365; // 365
PHP

Текущий квартал

echo intval((date('n') + 2) / 3); // 4
PHP

Для сложения и вычитания времени можно применить функцию strtotime() или просто работать с секундами:

1 минута 60 секунд 10 минут 600 секунд
1 час 3600 секунд 10 часов 36000 секунд
1 день 86400 секунд 2 дня 172800 секунд
1 неделя 604800 секунд 2 недели 1209600 секунд
1 месяц 2629743 секунд 2 месяца 5259486 секунд
1 год 31556926 секунд 2 года 63072000 секунд

Прибавить к дате 10 секунд

$time = time() + 10;
echo date('d.m.Y H:i:s', $time); // 29.11.2023 22:01:11 

/* или */
$time = strtotime('+10 seconds', time());
echo date('d.m.Y H:i:s', $time); // 29.11.2023 22:01:11
PHP

Прибавить к дате 10 минут

$time = time() + 600;
echo date('d.m.Y H:i:s', $time); // 29.11.2023 22:11:01 

/* или */
$time = strtotime('+10 minutes', time());
echo date('d.m.Y H:i:s', $time); // 29.11.2023 22:11:01
PHP

Прибавить к дате 1 час

$time = time() + 3600;
echo date('d.m.Y H:i:s', $time); // 29.11.2023 23:01:01 

/* или */
$time = strtotime('+1 hours', time());
echo date('d.m.Y H:i:s', $time); // 29.11.2023 23:01:01
PHP

Прибавить к дате 1 день

$time = time() + 86400;
echo date('d.m.Y H:i:s', $time); // 30.11.2023 22:01:01 

/* или */
$time = strtotime('+1 days', time());
echo date('d.m.Y H:i:s', $time); // 30.11.2023 22:01:01
PHP

Прибавить к дате неделю

$time = strtotime('+1 week', time());
echo date('d.m.Y H:i:s', $time); // 06.12.2023 22:01:01
PHP

Прибавить к дате месяц

$time = strtotime('+1 month', time());
echo date('d.m.Y H:i:s', $time); // 29.12.2023 22:01:01
PHP

Прибавить к дате год

$time = strtotime('+1 year', time());
echo date('d.m.Y H:i:s', $time); // 29.11.2024 22:01:01
PHP

Сколько прошло c 8:00

$date = date('d.m.Y 08:00');
$diff = time() - strtotime($date);
echo round($diff / 3600, 1);  // 14 часов
PHP

Сколько прошло c понедельника этой недели

$time = strtotime('monday');
$diff = time() - $time;
echo round($diff / 3600); // 70 часов
echo round($diff / 86400, 1); // 2,9 дней
PHP

*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.

Сколько прошло c начала года

$date = date('01.01.Y 00:00:00');
$diff = time() - strtotime($date);
echo intval($diff / 86400); // 332 дней

// или
echo date('z'); // 332
PHP

Сколько прошло c определённой даты

$date = '10.08.2016';
$diff = time() - strtotime($date);
echo round($diff / 3600); // 64030 часов
echo round($diff / 86400); // 2668 дней
PHP

Сколько остается до 23:00

$time = strtotime(date('d.m.Y 23:00'));
$diff = $time - time();
echo round($diff / 3600, 1); // 1 часов
PHP

Сколько остается до конца недели

$date = strtotime('next sunday, 23:59');
$diff = $date - time();
echo round($diff / 3600); // 98 часов
echo round($diff / 86400); // 4 дней
PHP

*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.

Сколько остается до конца месяца

$time = strtotime(date('Y-m-t 23:59'));
$diff = $time - time();
echo round($diff / 3600); // 26 часов
echo round($diff / 86400); // 1 дней
PHP

Сколько остается до конца года

$time = strtotime(date('Y-12-31 23:59'));
$diff = $time - time();
echo round($diff / 3600); // 770 часов
echo round($diff / 86400); // 32 дней
PHP

Сколько остается до определенной даты

$date = '10.08.2025';
$diff = strtotime($date) - time();
echo round($diff / 3600); // 14858 часов
echo round($diff / 86400); // 619 дней
PHP

Количество часов между датами

$date_1 = '01.01.2021 10:00';
$date_2 = '10.03.2021 18:00';
$seconds = abs(strtotime($date_1) - strtotime($date_2));
echo round($seconds / 3600); // 1640
PHP

Количество дней между датами

$date_1 = '01.01.2021 10:00';
$date_2 = '10.03.2021 18:00';
$seconds = abs(strtotime($date_1) - strtotime($date_2));
echo round($seconds / 86400, 1); // 68,3
PHP

Количество месяцев между датами

$date_1 = strtotime('01.01.2021 10:00');
$date_2 = strtotime('10.03.2021 18:00');

$months = 0;
while (strtotime('+1 month', $date_1) < $date_2) {
	$months++;
	$date_1 = strtotime('+1 month', $date_1);
}
$days = round(($date_2 - $date_1) / (60 * 60 * 24));

echo $months . ' месяца, ' . $days . ' дней'; // 2 месяца, 9 дней
PHP
09.11.2021, обновлено 04.12.2021
20383
Предыдущая запись Генерация QR-кода в PHP

Комментарии 3

Виталий Волонтеров Виталий Волонтеров
4 декабря 2022 в 12:42
+1
Специально не поленился и авторизовался, чтобы выразить благодарность авторам сайта, молодцы ребята! Неоднократно на вашем сайте получал именно нужную инфу, у вас все примеры разжеваны, с разными вариантами, не то что где нибудь найдешь вроде то, что тебе нужно и потом полдня думаешь, как под свою задачу это допилить. В данном случае мне нужно было кол-во дней между датами, при чем число должно быть дробным - то есть 3.6 дня, например. У вас нашел, скопировал, и вставил (только имена переменных поменял), все. Именно то, что нужно. И так бывало уже не раз. В общем, спасибо, и обязательно продолжайте в том же духе!
Александр Жуковский Александр Жуковский
26 ноября 2023 в 08:02
0
Благодарю автора сайта, все. Именно то, что нужно

, чтобы добавить комментарий.

Другие публикации

Как настроить Last-Modified
Заголовок Last-Modified помогает оптимизировать загрузку web-страниц и облегчить работу поисковым роботам.
7972
+1
Заполненные PHP-массивы для дат
Заполненные PHP-массивы с элементами дат для проверки данных, операций с датами, вывода списков в формах и т.д.
6120
+2
Вывод даты с русскими месяцами
PHP-функция для вывода даты в привычном формате из метки unix timestamp.
5701
+5
Часовые пояса в PHP
Список временных зон, совместимых с PHP
30573
+5
Календарь jQuery UI Datepicker
DatePicker – хороший и функциональный плагин для выбора даты, легко настраивается и привязывается к стандартному полю ввода формы.
73183
+5
Таблица символов ASCII + Windows 1251
Список из 256 символов и их коды в ASCII.
872290
+56