Примеры решения задач

Задача

Задача. Выведите 23 сентября 2031 года, 12:58:59 в формате timestamp.

Решение: воспользуемся функцией mktime (сентябрь - 9-тый месяц):

<?php
	echo mktime(12, 58, 59, 9, 23, 2031);

	/*
		Напоминаю, что месяц и день идут в неправильном порядке:
		поэтому '9, 23,' а не '23, 9'.
	*/
?>

Можно также воспользоваться функцией strtotime, если представить нужную дату в формате 2031-09-23 12:58:59:

<?php
	echo strtotime('2031-09-23 12:58:59');
?>

Задача

Задача. Найдите разницу между 1 сентября 2010 года, 7:25:59 и текущим моментом времени в секундах.

Решение: текущий момент времени в формате timestamp получим с помощью функции time, а timestamp для заданной даты - с помощью функции mktime. Отнимем одно число от второго и получим искомую разницу:

<?php
	echo time() - mktime(7, 25, 59, 9, 1, 2010);
?>

Задача . Функция date

Задача. Выведите текущую дату-время в формате '2025.12.31 12:59:59'.

Решение: воспользуемся функцией date, передав ей управляющие команды в таком порядке: год (команда Y), потом точку как символ, потом месяц (команда m), опять точку, день (команда d), час (команда H), двоеточие, минуту (команда i), секунду (команда s). Получится такая строка: 'Y.m.d H:i:s'. Подставим ее в функцию date:

<?php
	echo date('Y.m.d H:i:s');
?>

Задача . Функция date

Задача. Выведите 1-го сентября текущего года в формате '2017.09.01'.

Решение: для начала с помощью функции mktime преобразуем 1-го сентября текущего года в формат timestamp. Мы это делаем для того, чтобы подставить найденное число вторым параметром в функцию date (а первым параметром для date мы укажем формат вывода).

Так как требуется текущий год, то последний параметр (год) для mktime мы не указываем - тогда возьмется текущий год:

<?php
	//Выведем timestamp 1-го сентября текущего года:
	echo mktime(0, 0, 0, 9, 1);
?>

Ну, а теперь подставим найденный timestamp в функцию date:

<?php
	echo date('Y.m.d', mktime(0, 0, 0, 9, 1));
?>

Задача . Функция date. Вывод дня недели словом

Задача. Узнайте, какой день недели (словом) был 1 сентября 2010 года.

Решение: решение аналогично предыдущей задаче, только формат вывода для функции date мы сделаем в таком виде: 'w'. В этом случае date вернет нам число, соответствующее дню недели за заданную дату (0 - воскресенье, 1 - понедельник и так далее):

<?php
	//День недели числом за нужную дату:
	echo date('w', mktime(0, 0, 0, 9, 1, 2010));
?>

Кстати, если бы мы хотели узнать, какой день недели сегодня - мы бы просто не передавали второй параметр функции date (тогда бы взялся текущий момент времени и, соответственно, вывелась бы 'w' за текущий день).

Продолжим решать нашу задачу: мы вывели номер дня недели, а по задаче его следует вывести словом. Для этого составим массив дней недели $week и с его помощью выведем то, что нам нужно. Вот этот массив:

<?php
	//Массив дней недели:
	$week = ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'];

	//Выведем с его помощью, к примеру, понедельник:
	echo $week[1];

	//А теперь вторник:
	echo $week[2];
?>

Совместим теперь то, что вернет нам date, с нашим массивом $week:

<?php
	//День недели цифрой за нужную дату:
	$day = date('w', mktime(0, 0, 0, 9, 1, 2010));

	//Массив дней недели:
	$week = ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'];

	//День недели словом:
	echo $week[$day];
?>

Задача . Преобразование форматов

Задача. Дана дата в формате '31-12-2025'. С помощью функций mktime и explode переведите эту дату в формат timestamp.

Решение: разобьем строку '31-12-2025' функцией explode в массив $arr:

<?php
	$arr = explode('31-12-2025'); //получим ['31', '12', '2025']
?>

В элементе $arr[0] будет лежать день, в элементе $arr[1] - месяц, в элементе $arr[2] - год. Подставим эти данные в функцию mktime (напоминаю, что она принимает данные в формате '...месяц-день-год', не '...день-месяц-год')

<?php
	$arr = explode('31-12-2025');
	echo mktime(0, 0, 0, $arr[1], $arr[0], $arr[2]);
?>

Задачи для решения

Timestamp: time и mktime

Для решения задач данного блока вам понадобятся следующие функции: time, mktime.

Выведите текущее время в формате timestamp.

Решение:

<?php
	echo time();
?>

Выведите 1 марта 2025 года в формате timestamp.

Решение:

<?php
	echo mktime(0, 0, 0, 3, 1, 2025);
?>

Выведите 31 декабря текущего года в формате timestamp. Скрипт должен работать независимо от года, в котором он запущен.

Решение:

<?php
	echo mktime(0, 0, 0, 12, 31);
?>

Найдите количество секунд, прошедших с 13:12:59 15-го марта 2000 года до настоящего момента времени.

Решение:

<?php
	echo time() - mktime(13, 12, 59, 3, 15, 2000);
?>

Найдите количество целых часов, прошедших с 7:23:48 текущего дня до настоящего момента времени.

Решение:

<?php
	$sec = time() - mktime(7, 23, 48); //количество часов
	echo floor($sec / (60 * 60));
?>

Функция date

Для решения задач данного блока вам понадобятся следующие функции: date.

Выведите на экран текущий год, месяц, день, час, минуту, секунду.

Решение:

<?php
	echo date('Y.m.d H:i:s');
?>

Выведите текущую дату-время в форматах '2025-12-31', '31.12.2025', '31.12.13', '12:59:59'.

Решение:

<?php
	echo date('Y-m-d'); //в формате '2025-12-31'
	echo date('d.m.Y'); //в формате '31.12.2025'
	echo date('d.m.y'); //в формате '31.12.13'
	echo date('H:i:s'); //в формате '12:59:59'
?>

С помощью функций mktime и date выведите 12 февраля 2025 года в формате '12.02.2025'.

Решение:

<?php
	echo date('d.m.Y',  mktime(0, 0, 0, 2, 12, 2025));
?>

Создайте массив дней недели $week. Выведите на экран название текущего дня недели с помощью массива $week и функции date. Узнайте какой день недели был 06.06.2006, в ваш день рождения.

Решение:

<?php
	$week = ['вс', 'пн', 'вт', 'ср','чт', 'пт', 'сб'];
	echo $week[date('w',  mktime(0, 0, 0, 6, 6, 2006))];
?>

Создайте массив месяцев $month. Выведите на экран название текущего месяца с помощью массива $month и функции date.

Решение:

<?php
	$month = [
		1=>'янв', 'фев', 'мар', 'апр', 'май', 'июнь',
		'июль', 'авг', 'сен', 'окт', 'ноя', 'дек'
	];
	echo $month[date('n')];
?>

Найдите количество дней в текущем месяце. Скрипт должен работать независимо от месяца, в котором он запущен.

Решение:

<?php
	echo date('t');
?>

Сделайте поле ввода, в которое пользователь вводит год (4 цифры), а скрипт определяет високосный ли год.

Решение:

<form action="" method="GET">
	<input type="text" name="year">
	<input type="submit">
</form>

<?php
	if (isset($_REQUEST['year'])) {
		$year = $_REQUEST['year'];
		if (date('L', mktime(0, 0, 0, 1, 1, $year)) == 1) {
			echo 'год високосный';
		} else {
			echo 'год не високосный';
		}
	}
?>

Сделайте форму, которая спрашивает дату в формате '31.12.2025'. С помощью функций mktime и explode переведите эту дату в формат timestamp. Узнайте день недели (словом) за введенную дату.

Решение:

<form action="" method="GET">
	<input type="text" name="date">
	<input type="submit">
</form>

<?php
	if (isset($_REQUEST['date'])) {
		$date = explode('.', $_REQUEST['date']);
		$week = ['вс', 'пн', 'вт', 'ср','чт', 'пт', 'сб'];
		echo $week[date('w',  mktime(0, 0, 0, $date[1], $date[0], $date[2]))];
	}
?>

Сделайте форму, которая спрашивает дату в формате '2025-12-31'. С помощью функций mktime и explode переведите эту дату в формат timestamp. Узнайте месяц (словом) за введенную дату.

Решение:

<form action="" method="GET">
	<input type="text" name="date">
	<input type="submit">
</form>

<?php
	if (isset($_REQUEST['date'])) {
		$date = explode('-', $_REQUEST['date']);
		$month = [
			1=>'янв', 'фев', 'мар', 'апр', 'май', 'июнь',
			'июль', 'авг', 'сен', 'окт', 'ноя', 'дек'
		];
		echo $month[date('n',  mktime(0, 0, 0, $date[1], $date[2], $date[0]))];
	}
?>

Сравнение дат

Сделайте форму, которая спрашивает две даты в формате '2025-12-31'. Первую дату запишите в переменную $date1, а вторую в $date2. Сравните, какая из введенных дат больше. Выведите ее на экран.

Решение:

<form action="" method="GET">
	<input type="text" name="date1">
	<input type="text" name="date2">
	<input type="submit">
</form>

<?php
	if (isset($_REQUEST['date1']) and isset($_REQUEST['date2'])) {
		$date1 = $_REQUEST['date1'];
		$date2 = $_REQUEST['date2'];
		if ($date1 > $date2) {
			echo $date1;
		} else {
			echo $date2;
		}
	}
?>

На strtotime

Для решения задач данного блока вам понадобятся следующие функции: strtotime.

Дана дата в формате '2025-12-31'. С помощью функции strtotime и функции date преобразуйте ее в формат '31-12-2025'.

Решение:

<?php
	echo date('d-m-Y', strtotime('2025-12-31'));
?>

Сделайте форму, которая спрашивает дату-время в формате '2025-12-31T12:13:59'. С помощью функции strtotime и функции date преобразуйте ее в формат '12:13:59 31.12.2025'.

Решение:

<form action="" method="GET">
	<input type="text" name="date">
	<input type="submit">
</form>

<?php
	if (isset($_REQUEST['date'])) {
		echo date('H:i:s d.m.Y', strtotime($_REQUEST['date']));
	}
?>

Прибавление и отнимание дат

Для решения задач данного блока вам понадобятся следующие функции: date_create, date_modify, date_format.

В переменной $date лежит дата в формате '2025-12-31'. Прибавьте к этой дате 2 дня, 1 месяц и 3 дня, 1 год. Отнимите от этой даты 3 дня.

Решение:

<?php
	//2 дня
	$date =  date_create('2025-12-31');
	date_modify($date, '2 day');
	echo date_format($date, 'd.m.Y');

	//1 месяц и 3 дня
	$date =  date_create('2025-12-31');
	date_modify($date, '1 month 3 day');
	echo date_format($date, 'd.m.Y');

	//1 год
	$date =  date_create('2025-12-31');
	date_modify($date, '1 year');
	echo date_format($date, 'd.m.Y');

	//Минус 3 дня
	$date =  date_create('2025-12-31');
	date_modify($date, '-3 day');
	echo date_format($date, 'd.m.Y');
?>

Задачи

Узнайте сколько дней осталось до Нового Года. Скрипт должен работать в любом году.

Решение:

<?php
	//Последняя секунда 31-го декабря текущего года:
	$time = mktime(23, 59, 59, 12, 31);
	
	//Первая секунда нового года:
	$time = $time + 1;
	
	//Отнимем от этого момента текущий и преобразуем в дни:
	echo floor(($time - time()) / (60 * 60 * 24));
?>

Сделайте форму с одним полем ввода, в которое пользователь вводит год. Найдите все пятницы 13-е в этом году. Результат выведите в виде массива дат.

Решение:

<form action="" method="GET">
	<input type="text" name="year">
	<input type="submit">
</form>

<?php
	if (isset($_REQUEST['year'])) {
		$year = $_REQUEST['year'];
		$arr = [];
		for($i = 1; $i <= 12; $i++) {
			$timestamp = mktime(0, 0, 0, $i, 13, $year);
			if (date('w', $timestamp) == 5) {
				$arr[] = date('d-m-Y', $timestamp);
			}
		}
		var_dump($arr);
	}
?>

Узнайте какой день недели был 100 дней назад.

Решение:

<?php
	$date = date_create();
	date_modify($date, '-100 day');
	$num = date_format($date, 'w');

	$week = ['вс', 'пн', 'вт', 'ср','чт', 'пт', 'сб'];
	echo $week[$num];
?>