Maison >développement back-end >tutoriel php >Carbon, un package de traitement de date et d'heure dans Laravel

Carbon, un package de traitement de date et d'heure dans Laravel

巴扎黑
巴扎黑original
2018-05-24 13:48:229197parcourir

Il y a de nombreux éléments à prendre en compte lors du traitement des dates et des heures, tels que le format de la date, le fuseau horaire, les années bissextiles et les mois avec des jours différents. Il est trop facile de faire des erreurs par vous-même. L'article suivant vous présente principalement la date et l'heure. le traitement du temps dans Laravel. Les amis qui ont besoin d'une utilisation simple de Carbon peuvent s'y référer.

Préface

Nous avons tous souvent besoin de gérer des dates et des heures lors de l'écriture d'applications PHP. Cet article vous fera découvrir Carbon -. hérité de Une extension API de la classe PHP DateTime qui facilite le travail avec les dates et les heures.

La classe de traitement du temps par défaut utilisée dans Laravel est Carbon.

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

Vous pouvez voir l'extrait de code déclaré ci-dessus dans la classe Carbon dans l'espace de noms Carbon.

Installation

Carbon peut être installé via Composer :

composer require nesbot/carbon

PS : Puisque le projet Laravel a installé ce package par défaut, il n'est pas nécessaire d'exécuter à nouveau la commande ci-dessus.

Pour utiliser

, vous devez importer Carbon via l'espace de noms pour l'utiliser sans fournir le nom complet à chaque fois.

use Carbon\Carbon;

Obtenir l'heure actuelle

Vous pouvez obtenir la date et l'heure actuelles avec la méthode now(). Si vous ne spécifiez pas d'argument, il utilisera le fuseau horaire de la configuration PHP :

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

Si vous souhaitez utiliser un fuseau horaire différent, vous devez passer un fuseau horaire valide comme argument :

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

En plus de now() , il fournit également des fonctions statiques telles que today() , tomorrow() et yesterday() Cependant, leurs heures sont toutes 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
Le résultat ci-dessus Le résultat est en fait un objet date et heure de type Carbon :

Carbon {#179 ▼
 +"date": "2016-06-14 00:00:00.000000"
 +"timezone_type": 3
 +"timezone": "UTC"
}
Pour obtenir une date de type chaîne, vous pouvez utiliser le code suivant :

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

Convertir le type de date en chaîne

Comme mentionné ci-dessus, par défaut, la méthode de Carbon renvoie un objet date et heure. Bien qu'il s'agisse d'un objet, vous pouvez directement utiliser echo pour afficher le résultat grâce à la méthode magique __toString. Mais si vous souhaitez le convertir en chaîne, vous pouvez utiliser la méthode toDateString ou toDateTimeString :

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

Analyse de date

Vous pouvez également utiliser la méthode parse Analyser des dates de n'importe quel ordre et type (le résultat est un objet datetime de 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

Construire une date

Vous peut également utiliser une année, un mois et un jour distincts pour construire une 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); // 年默认为当前年份
De plus, un fuseau horaire valide peut être transmis comme dernier argument.

Opérations de date

Les opérations de date peuvent être effectuées en ajoutant (augmentant) ou en soustrayant (soustrayant) pour suivre les unités à ajouter ou à soustraire. Par exemple, si vous souhaitez ajouter un nombre spécifié de jours à une date, vous pouvez utiliser la méthode addDays. De plus, une méthode de modification est fournie. Le format du paramètre est + ou - suivi de la valeur et de l'unité. Ainsi, si vous souhaitez ajouter une année à la date actuelle, vous pouvez passer +1 an :

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

Comparaison de dates

Dans Carbon vous can Utilisez les méthodes suivantes pour comparer les dates :

  • min – Renvoie la date minimale.

  • max – Renvoie la date maximale.

  • eq – Détermine si deux dates sont égales.

  • gt – Détermine si la première date est supérieure à la deuxième date.

  • lt – Détermine si la première date est plus petite que la deuxième date.

  • gte – Détermine si la première date est supérieure ou égale à la deuxième date.

  • lte – Détermine si la première date est inférieure ou égale à la deuxième 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)
Pour déterminer si une date est comprise entre deux dates, vous pouvez utiliser la méthode between(). Le troisième paramètre facultatif spécifie si la comparaison peut être égale. :

$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)
De plus, quelques méthodes auxiliaires sont fournies, vous pouvez comprendre leur signification à partir de leurs noms :

$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

« Il y a un mois » est plus facile à lire que « il y a 30 jours ». De nombreuses bibliothèques de dates proposent cette fonction commune. Une fois la date analysée, il existe quatre possibilités :

1. dépasse l'heure par défaut actuelle


  • il y a 1 jour

  • il y a 5 mois

2. Lorsque l'on compare l'heure future avec l'heure par défaut actuelle


  • Dans 1 heure

  • Dans 5 mois

3. Lorsque la valeur comparée dépasse une autre valeur


  • Il y a 1 heure

  • 5 mois il y a

4. Lorsque la valeur comparée est après une autre valeur


  • 1 heure plus tard

  • 5 mois plus tard

Vous pouvez définir le deuxième paramètre sur true pour supprimer les modificateurs tels que "avant" et "à partir de maintenant" :

. 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周

Localisation

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

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

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

$article->created_at->diffForHumans();

类似的格式即可。

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn