0Pricing
PHP Academy · Урок

Класс DateTime

Создавайте и изменяйте даты с помощью объектно-ориентированного API DateTime

«Класс DateTime» — бесплатный урок PHP Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

DateTime и процедурные функции работы с датами

В PHP есть процедурные функции (date(), strtotime()) и объектно-ориентированный API DateTime. Объектно-ориентированный подход предпочтительнее для сложных операций:

  • DateTime — изменяемый объект даты и времени
  • DateTimeImmutable — неизменяемый объект (безопаснее в современном коде)

Создание объектов DateTime

Создавайте объекты DateTime из различных входных данных:

<?php
$now     = new DateTime();                     // current time
$specific = new DateTime('2024-12-25 14:30:00');  // from string
$fromTs  = new DateTime('@' . time());            // from Unix timestamp

echo $now->format('Y-m-d H:i:s');
echo $specific->format('D, d M Y');

// DateTimeImmutable is safer:
$dt = new DateTimeImmutable('2024-01-01');

Форматирование с помощью format()

Форматируйте DateTime с помощью тех же символов форматирования, что и в date():

<?php
$dt = new DateTime('2024-05-27 14:30:00');

echo $dt->format('Y-m-d');           // 2024-05-27
echo $dt->format('H:i:s');           // 14:30:00
echo $dt->format('D d M Y, H:i');    // Mon 27 May 2024, 14:30
echo $dt->format('U');               // Unix timestamp
echo $dt->format(DateTime::ATOM);    // ISO 8601

modify()

Изменяйте DateTime с помощью относительного выражения:

<?php
$dt = new DateTime('2024-01-15');

$dt->modify('+1 month');
echo $dt->format('Y-m-d');  // 2024-02-15

$dt->modify('next Friday');
echo $dt->format('Y-m-d');

// DateTimeImmutable creates new object:
$dt2 = new DateTimeImmutable('2024-01-15');
$dt3 = $dt2->modify('+1 year'); // $dt2 unchanged

createFromFormat()

Разбирайте строку с датой, используя определённый формат:

<?php
// Parse European date format
$dt = DateTime::createFromFormat('d/m/Y', '25/12/2024');
echo $dt->format('Y-m-d');  // 2024-12-25

// Parse with time
$dt2 = DateTime::createFromFormat('d.m.Y H:i', '27.05.2024 14:30');
echo $dt2->format('c');  // ISO 8601

// Returns false on failure:
$bad = DateTime::createFromFormat('Y-m-d', 'not-a-date');
var_dump($bad);  // bool(false)

Сравнение объектов DateTime

Сравнивайте объекты DateTime с помощью операторов сравнения:

<?php
$a = new DateTime('2024-01-01');
$b = new DateTime('2024-12-31');

var_dump($a < $b);   // true
var_dump($a == $b);  // false
var_dump($a > $b);   // false

// Sort an array of DateTime:
$dates = [new DateTime('2024-06-01'), new DateTime('2024-01-01')];
usort($dates, fn($a, $b) => $a <=> $b);
echo $dates[0]->format('Y-m-d');  // 2024-01-01

getTimestamp()

Преобразуйте DateTime во временную метку Unix:

<?php
$dt = new DateTime('2024-12-25');

$ts = $dt->getTimestamp();
echo $ts;  // Unix timestamp for Dec 25 2024

// setTimestamp()
$dt2 = new DateTime();
$dt2->setTimestamp($ts);
echo $dt2->format('Y-m-d');  // 2024-12-25

Установка компонентов даты и времени

Изменяйте отдельные компоненты DateTime:

<?php
$dt = new DateTime();

$dt->setDate(2024, 12, 25);
$dt->setTime(23, 59, 59);

echo $dt->format('Y-m-d H:i:s');
// 2024-12-25 23:59:59

// Or chain with DateTimeImmutable:
$dt = (new DateTimeImmutable())
    ->setDate(2024, 12, 25)
    ->setTime(0, 0, 0);

DateTime на практике: проверка подписки

Практический пример: проверьте, активна ли ещё подписка:

<?php
function isSubscriptionActive(string $expiresAt): bool {
    $expiry = new DateTimeImmutable($expiresAt);
    $now    = new DateTimeImmutable();
    return $expiry > $now;
}

var_dump(isSubscriptionActive('2025-12-31'));  // true
var_dump(isSubscriptionActive('2020-01-01'));  // false

Библиотека Carbon

Carbon — популярная библиотека PHP, расширяющая DateTime плавным API:

<?php
// After: composer require nesbot/carbon
use Carbon\Carbon;

$now  = Carbon::now();
$then = Carbon::parse('2024-01-01');

echo $now->diffForHumans($then);  // '5 months after'
echo $now->addWeek()->format('Y-m-d');
echo Carbon::tomorrow()->isWeekday() ? 'weekday' : 'weekend';

// Locale-aware:
Carbon::setLocale('tr');
echo $now->diffForHumans($then); // Turkish

ISO 8601 и DateTime::ATOM

Используйте формат ISO 8601 для API и баз данных:

<?php
$dt = new DateTime();

// ISO 8601
echo $dt->format('c');              // 2024-05-27T14:30:00+03:00
echo $dt->format(DateTime::ATOM);   // same
echo $dt->format(DateTime::RFC3339); // same family

// For JSON APIs:
$json = json_encode([
    'created_at' => $dt->format(DateTime::ATOM)
]);
echo $json;

Быстрая проверка

В чём заключается ключевое различие между DateTime и DateTimeImmutable?

Итоги: класс DateTime

Основы объектно-ориентированной работы с DateTime:

  • new DateTime('date string') для создания
  • format() для получения результата
  • modify() для относительных изменений
  • createFromFormat() для разбора пользовательских форматов
  • Предпочитайте DateTimeImmutable, чтобы избежать ошибок, связанных с изменением объектов
  • Используйте ISO 8601 (DateTime::ATOM) для API

Часто задаваемые вопросы

Урок «Класс DateTime» бесплатный?

Да — полный текст урока «Класс DateTime» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Класс DateTime»?

Создавайте и изменяйте даты с помощью объектно-ориентированного API DateTime Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Класс DateTime»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Временные метки Unix и date()
  2. Класс DateTime
  3. Арифметика дат с DateInterval
  4. Часовые пояса в PHP
← Назад к PHP Academy