Home  >  Article  >  Backend Development  >  Carbon, a date and time processing package in Laravel

Carbon, a date and time processing package in Laravel

巴扎黑
巴扎黑Original
2018-05-24 13:48:229143browse

There are many things to consider when processing dates and times, such as date format, time zone, leap year, and months with different days. It is too easy to make mistakes by yourself. The following article mainly introduces you to date and time processing in Laravel. Friends who need the simple use of Carbon can refer to it.

Preface

We all often need to deal with dates and times when writing PHP applications. This article will take you to learn about Carbon - inherited from An API extension to the PHP DateTime class that makes working with dates and times easier.

The default time processing class used in Laravel is Carbon.

<?php
namespace Carbon;
 
class Carbon extends \DateTime
{
 // code here
}

You can see the code snippet declared above in the Carbon class in the Carbon namespace.

Installation

Carbon can be installed through Composer:

composer require nesbot/carbon

PS: Since the Laravel project has installed this package by default, there is no need to execute the above command again.

Using

You need to import Carbon through the namespace to use it, without providing the full name every time.

use Carbon\Carbon;

Get the current time

You can get the current date and time with the now() method. If you don't specify a parameter, it will use the time zone from the PHP configuration:

<?php
echo Carbon::now(); //2016-10-14 20:21:20
?>

If you want to use a different time zone, you need to pass a valid time zone as the parameter:

// 直接使用字符串
echo Carbon::now(&#39;Europe/London&#39;); //2016-10-14 20:21:20
// 或者
echo Carbon::now(new DateTimeZone(&#39;Europe/London&#39;));

except# In addition to ##now() , static functions such as today() , tomorrow(), yesterday() are also provided. However, their The time is all 00:00:00:

echo Carbon::now();        // 2016-10-14 15:18:34
echo Carbon::today();       // 2016-10-14 00:00:00
echo Carbon::tomorrow(&#39;Europe/London&#39;);       // 2016-10-14 00:00:00
echo Carbon::yesterday();       // 2016-10-14 00:00:00

The above output result is actually a Carbon type date and time object:

Carbon {#179 ▼
 +"date": "2016-06-14 00:00:00.000000"
 +"timezone_type": 3
 +"timezone": "UTC"
}

To get the date of string type, you can use the following code :

echo Carbon::today()->toDateTimeString();
echo Carbon::yesterday()->toDateTimeString();
echo Carbon::tomorrow()->toDateTimeString();

Convert date type to string

As mentioned above, by default, the Carbon method returns a Datetime object. Although it is an object, you can directly use echo to output the result because of the __toString magic method. But if you want to convert it to a string, you can use the toDateString or toDateTimeString method:

echo Carbon::now()->toDateString(); //2016-10-14
echo Carbon::now()->toDateTimeString(); //2016-10-14 20:22:50

Date parsing

You can also use the parse method to parse any Sequential and typed date (the result is a datetime object of type Carbon):

echo Carbon::parse(&#39;2016-10-15&#39;)->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse(&#39;2016-10-15&#39;)->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse(&#39;2016-10-15 00:10:25&#39;)->toDateTimeString(); //2016-10-15 00:10:25
 
echo Carbon::parse(&#39;today&#39;)->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse(&#39;yesterday&#39;)->toDateTimeString(); //2016-10-14 00:00:00
echo Carbon::parse(&#39;tomorrow&#39;)->toDateTimeString(); //2016-10-16 00:00:00
echo Carbon::parse(&#39;2 days ago&#39;)->toDateTimeString(); //2016-10-13 20:49:53
echo Carbon::parse(&#39;+3 days&#39;)->toDateTimeString(); //2016-10-18 20:49:53
echo Carbon::parse(&#39;+2 weeks&#39;)->toDateTimeString(); //2016-10-29 20:49:53
echo Carbon::parse(&#39;+4 months&#39;)->toDateTimeString(); //2017-02-15 20:49:53
echo Carbon::parse(&#39;-1 year&#39;)->toDateTimeString(); //2015-10-15 20:49:53
echo Carbon::parse(&#39;next wednesday&#39;)->toDateTimeString(); //2016-10-19 00:00:00
echo Carbon::parse(&#39;last friday&#39;)->toDateTimeString(); //2016-10-14 00:00:00

Constructing a date

You can also use separate year, month and day to Constructing Date:

$year = &#39;2015&#39;;
$month = &#39;04&#39;;
$day = &#39;12&#39;;
 
echo Carbon::createFromDate($year, $month, $day); //2015-04-12 20:55:59
 
$hour = &#39;02&#39;;
$minute = &#39;15&#39;:
$second = &#39;30&#39;;
 
echo Carbon::create($year, $month, $day, $hour, $minute, $second); //2015-04-12 02:15:30
 
echo Carbon::createFromDate(null, 12, 25); // 年默认为当前年份

Additionally, a valid time zone can be passed as the last parameter.

Date Operations

Date operations can be done by adding (increasing) or sub (subtracting) followed by the unit to be added or subtracted. For example, if you want to add a specified number of days to a date, you can use the addDays method. In addition, a modify method is provided. The parameter format is + or - followed by the value and unit. So, if you want to add one year to the current date, you can pass +1 year:

echo Carbon::now()->addDays(25); //2016-11-09 14:00:01
echo Carbon::now()->addWeeks(3); //2016-11-05 14:00:01
echo Carbon::now()->addHours(25); //2016-10-16 15:00:01
echo Carbon::now()->subHours(2); //2016-10-15 12:00:01
echo Carbon::now()->addHours(2)->addMinutes(12); //2016-10-15 16:12:01
echo Carbon::now()->modify(&#39;+15 days&#39;); //2016-10-30 14:00:01
echo Carbon::now()->modify(&#39;-2 days&#39;); //2016-10-13 14:00:01

Date comparison

In Carbon you can use the following Methods to compare dates:

  • min – Returns the minimum date.

  • max – Returns the maximum date.

  • eq – Determines whether two dates are equal.

  • gt – Determines whether the first date is greater than the second date.

  • lt – Determines whether the first date is smaller than the second date.

  • gte – Determine whether the first date is greater than or equal to the second date.

  • lte – Determines whether the first date is less than or equal to the second date.

  • echo Carbon::now()->tzName;            // America/Toronto
    $first = Carbon::create(2012, 9, 5, 23, 26, 11);
    $second = Carbon::create(2012, 9, 5, 20, 26, 11, &#39;America/Vancouver&#39;);
     
    echo $first->toDateTimeString();          // 2012-09-05 23:26:11
    echo $first->tzName;                // America/Toronto
    echo $second->toDateTimeString();         // 2012-09-05 20:26:11
    echo $second->tzName;               // America/Vancouver
     
    var_dump($first->eq($second));           // bool(true)
    var_dump($first->ne($second));           // bool(false)
    var_dump($first->gt($second));           // bool(false)
    var_dump($first->gte($second));          // bool(true)
    var_dump($first->lt($second));           // bool(false)
    var_dump($first->lte($second));          // bool(true)
     
    $first->setDateTime(2012, 1, 1, 0, 0, 0);
    $second->setDateTime(2012, 1, 1, 0, 0, 0);     // Remember tz is &#39;America/Vancouver&#39;
     
    var_dump($first->eq($second));           // bool(false)
    var_dump($first->ne($second));           // bool(true)
    var_dump($first->gt($second));           // bool(false)
    var_dump($first->gte($second));          // bool(false)
    var_dump($first->lt($second));           // bool(true)
    var_dump($first->lte($second));          // bool(true)
To determine whether a date is between two dates, you can use the between() method. The third optional parameter specifies whether the comparison can be equal. The default is true:

$first = Carbon::create(2012, 9, 5, 1);
$second = Carbon::create(2012, 9, 5, 5);
var_dump(Carbon::create(2012, 9, 5, 3)->between($first, $second));     // bool(true)
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second));     // bool(true)
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second, false));  // bool(false)

In addition, some auxiliary methods are provided, you can understand their meaning from their names:

$dt = Carbon::now();
 
$dt->isWeekday();
$dt->isWeekend();
$dt->isYesterday();
$dt->isToday();
$dt->isTomorrow();
$dt->isFuture();
$dt->isPast();
$dt->isLeapYear();
$dt->isSameDay(Carbon::now());
$born = Carbon::createFromDate(1987, 4, 23);
$noCake = Carbon::createFromDate(2014, 9, 26);
$yesCake = Carbon::createFromDate(2014, 4, 23);
$overTheHill = Carbon::now()->subYears(50);
var_dump($born->isBirthday($noCake));       // bool(false)
var_dump($born->isBirthday($yesCake));       // bool(true)
var_dump($overTheHill->isBirthday());       // bool(true) -> default compare it to today!

diffForHumans

"A "Months ago" is easier to read than "30 days ago". Many date libraries provide this common function. After the date is parsed, there are four possibilities:

1. When the compared time exceeds the current Default time


  • 1 days ago

  • 5 months ago

2. Compare future time with current default time


  • 1 hour from now

  • 5 months from now

3. When the compared value exceeds another value


  • 1 hour ago

  • 5 months ago

4. When the compared value is after another value


  • 1 hour later

  • 5 months later

You can set the second parameter to true to delete modifiers such as "before" and "from now":

diffForHumans(Carbon $other, true) .

echo Carbon::now()->subDays(5)->diffForHumans();        // 5天前
 
echo Carbon::now()->diffForHumans(Carbon::now()->subYear());  // 1年后
 
$dt = Carbon::createFromDate(2011, 8, 1);
 
echo $dt->diffForHumans($dt->copy()->addMonth());       // 1月前
echo $dt->diffForHumans($dt->copy()->subMonth());       // 11月后
 
echo Carbon::now()->addSeconds(5)->diffForHumans();      // 5秒距现在
 
echo Carbon::now()->subDays(24)->diffForHumans();       // 3周前
echo Carbon::now()->subDays(24)->diffForHumans(null, true);  // 3周

Localization

可以在 app/Providers/AppServiceProvider.php 的 boot() 方法中添加下面的代码来设置全局本地化:

public function boot()
{
  \Carbon\Carbon::setLocale(&#39;zh&#39;);
}

设置好之后,在输出时间的地方调用:

$article->created_at->diffForHumans();

类似的格式即可。

更多 Carbon 操作,可查看文档。

The above is the detailed content of Carbon, a date and time processing package in Laravel. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn