Carbon - обработка даты/времени в PHP, вам нужно только это расширение

PHP

PHP

Статья перепечатана с:learnku.com/php/t/26998

Работа с датами и временем в PHP — непростая и непонятная задача. мы должны иметь дело сstrtotime, проблемы с форматированием, тяжелые вычисления и многое другое.

Этот красивый пакет называетсяCarbonМожет помочь сделать работу с датой/временем в PHP-разработке более простой и семантической, упрощая чтение и поддержку нашего кода.

Carbon

Углерод производитсяBrian NesbitРазработан пакет, расширяющий собственные возможности PHP.DateTimeсвоего рода.

PHP

Он предоставляет несколько полезных функций для работы с датами в PHP, особенно такие, как:

  • Обработка часовых поясов
  • Получить текущее время легко
  • Преобразование содержимого в удобочитаемую дату и время
  • Разобрать английские фразы в datetime (first day of January 2016)
  • Сложение и вычитание дат (+ 2 weeks-6 months)
  • Семантические методы обработки дат

Все это поставляется с очень полезным пакетом, который упрощает работу со временем в PHP.

настраивать

Чтобы использовать Carbon , вам нужно начать сCarbonПространство имен импортируют углерод. К счастью, в Ламарду он был включен в углерод, и поэтому не нужноComposerдобавить вместе.

Когда нам нужно использовать Carbon, мы можем импортировать его следующим образом:

<?php
use Carbon\Carbon;

После импорта давайте посмотрим, что можно сделать с этим замечательным пакетом.

Получить конкретную дату/время


// 获取当前时间  - 2015-12-19 10:10:54
$current = Carbon::now();
$current = new Carbon();

// 获取今天 - 2015-12-19 00:00:00
$today = Carbon::today();

// 获取昨天 - 2015-12-18 00:00:00
$yesterday = Carbon::yesterday();

// 获取明天 - 2015-12-20 00:00:00
$tomorrow = Carbon::tomorrow();

// 解析特定字符串 - 2016-01-01 00:00:00
$newYear = new Carbon('first day of January 2016');

// 设定一个特定的时区 - 2016-01-01 00:00:00
$newYearPST = new Carbon('first day of January 2016', 'America\Pacific');

Создавайте даты с более точным контролем

В дополнение к быстрому определению методов даты/времени, Carbon также позволяет нам создавать время из определенного количества параметров.


Carbon::createFromDate($year, $month, $day, $tz);
Carbon::createFromTime($hour, $minute, $second, $tz);
Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);

При попадании в определенную дату или время формат Carbon обычно не распознается, что очень удобно. Если кто-то из вас является аргументомnullзначение, оно будет передано с текущей датой/временем по умолчанию.

Дата/время операции

Захват даты/времени — не единственное, что вы делаете при работе с датами. Вам часто нужно манипулировать датой или временем.

Например, при создании пробного периода для пользователя вы хотите, чтобы пробный период истекал через определенное время. Предположим, у нас есть 30-дневный пробный период. мы можем использоватьaddиsubtractРассчитать время несложно.

В течение пробного периода мы:


// 获取当前时间
$current = Carbon::now();

// 添加 30 天到当前时间
$trialExpires = $current->addDays(30);

отУглеродная документация, мы можем найти некоторые другиеadd()иsub()метод:


$dt = Carbon::create(2012, 1, 31, 0);

echo $dt->toDateTimeString();            // 2012-01-31 00:00:00

echo $dt->addYears(5);                   // 2017-01-31 00:00:00
echo $dt->addYear();                     // 2018-01-31 00:00:00
echo $dt->subYear();                     // 2017-01-31 00:00:00
echo $dt->subYears(5);                   // 2012-01-31 00:00:00

echo $dt->addMonths(60);                 // 2017-01-31 00:00:00
echo $dt->addMonth();                    // 2017-03-03 00:00:00 equivalent of $dt->month($dt->month + 1); so it wraps
echo $dt->subMonth();                    // 2017-02-03 00:00:00
echo $dt->subMonths(60);                 // 2012-02-03 00:00:00

echo $dt->addDays(29);                   // 2012-03-03 00:00:00
echo $dt->addDay();                      // 2012-03-04 00:00:00
echo $dt->subDay();                      // 2012-03-03 00:00:00
echo $dt->subDays(29);                   // 2012-02-03 00:00:00

echo $dt->addWeekdays(4);                // 2012-02-09 00:00:00
echo $dt->addWeekday();                  // 2012-02-10 00:00:00
echo $dt->subWeekday();                  // 2012-02-09 00:00:00
echo $dt->subWeekdays(4);                // 2012-02-03 00:00:00

echo $dt->addWeeks(3);                   // 2012-02-24 00:00:00
echo $dt->addWeek();                     // 2012-03-02 00:00:00
echo $dt->subWeek();                     // 2012-02-24 00:00:00
echo $dt->subWeeks(3);                   // 2012-02-03 00:00:00

echo $dt->addHours(24);                  // 2012-02-04 00:00:00
echo $dt->addHour();                     // 2012-02-04 01:00:00
echo $dt->subHour();                     // 2012-02-04 00:00:00
echo $dt->subHours(24);                  // 2012-02-03 00:00:00

echo $dt->addMinutes(61);                // 2012-02-03 01:01:00
echo $dt->addMinute();                   // 2012-02-03 01:02:00
echo $dt->subMinute();                   // 2012-02-03 01:01:00
echo $dt->subMinutes(61);                // 2012-02-03 00:00:00

echo $dt->addSeconds(61);                // 2012-02-03 00:01:01
echo $dt->addSecond();                   // 2012-02-03 00:01:02
echo $dt->subSecond();                   // 2012-02-03 00:01:01
echo $dt->subSeconds(61);                // 2012-02-03 00:00:00    

Getters and Setters

Еще один быстрый способ манипулировать временем или считать его — использовать доступные геттеры и серреры.


$dt = Carbon::now();

// 设置一些参数
$dt->year   = 2015;
$dt->month  = 04;
$dt->day    = 21;
$dt->hour   = 22;
$dt->minute = 32;
$dt->second = 5;

// 获取一些参数
var_dump($dt->year);
var_dump($dt->month);
var_dump($dt->day);
var_dump($dt->hour);
var_dump($dt->second);
var_dump($dt->dayOfWeek);
var_dump($dt->dayOfYear);
var_dump($dt->weekOfMonth);
var_dump($dt->daysInMonth);

Мы даже можем объединить несколько сеттеров.


$dt = Carbon::now();

$dt->year(1975)->month(5)->day(21)->hour(22)->minute(32)->second(5)->toDateTimeString();
$dt->setDate(1975, 5, 21)->setTime(22, 32, 5)->toDateTimeString();
$dt->setDateTime(1975, 5, 21, 22, 32, 5)->toDateTimeString();

формат

В приведенном выше примере вы, возможно, заметили->toDateTimeString()метод. Мы можем легко отформатировать для нашей цели. В этом случае мы получаем строку даты и времени.


$dt = Carbon::now();

echo $dt->toDateString();               // 2015-12-19
echo $dt->toFormattedDateString();      // Dec 19, 2015
echo $dt->toTimeString();               // 10:10:16
echo $dt->toDateTimeString();           // 2015-12-19 10:10:16
echo $dt->toDayDateTimeString();        // Sat, Dec 19, 2015 10:10 AM

// ……当然 format() 也可以这样用
echo $dt->format('l jS \\of F Y h:i:s A');         // Saturday 19th of December 2015 10:10:16 AM

Относительное время

пройти черезdiff()метод, чтобы легко отображать относительное время.

Например, у нас есть блог и мы хотим показать, что этотри часаопубликовано ранее. Эти методы можно использовать.

найти разницу во времени

Эти методы используются для нахождения разницы во времени между двумя временами.


$current = Carbon::now();
$dt      = Carbon::now();

$dt = $dt->subHours(6);
echo $dt->diffInHours($current);         // -6
echo $current->diffInHours($dt);         // 6

$future = $current->addMonth();
$past   = $current->subMonths(2);
echo $current->diffInDays($future);      // 31
echo $current->diffInDays($past);        // -62

Разница во времени, показывающая удобочитаемость для человека

Отображение относительного времени становится все более популярным в последние несколько лет. Часто встречается в социальных сетях, таких как Twitter и Facebook.

Например, покажите время как3 часа назадчем отображать8:12 утра, больше подходит для человеческого чтения.

Эти методы используются для вычисления разницы во времени и преобразования ее в удобочитаемый формат.

Вот четыре способа выразить разницу во времени:

  • Сравни прошедшее время с настоящим:
    • 1 час назад
    • 5 месяцев назад
  • Сравните будущее время с настоящим:
    • 1 час спустя
    • 5 месяцев спустя
  • Сравните одно прошедшее время с другим:
    • 1 час назад
    • 5 часов назад
  • Сравните одно будущее время с другим:
    • 1 час спустя
    • 5 часов спустя

$dt     = Carbon::now();
$past   = $dt->subMonth();
$future = $dt->addMonth();

echo $dt->subDays(10)->diffForHumans();     // 10 天前
echo $dt->diffForHumans($past);             // 1 个月前
echo $dt->diffForHumans($future);           // 1 个月前

Суммировать

Углерод может сделать гораздо больше. Обязательно проверьтеОфициальная документация по углероду. Надеюсь, это поможет вам легче работать с датой/временем в PHP и ускорить вашу разработку!

Статья перепечатана с:learnku.com/php/t/26998
Еще статьи:Learncool.com/pull-ravel/from/he…