Maison  >  Article  >  développement back-end  >  Exemples d'utilisation du package de traitement de date et d'heure Carbon dans Laravel

Exemples d'utilisation du package de traitement de date et d'heure Carbon dans Laravel

黄舟
黄舟original
2017-09-23 09:27:392285parcourir

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 : Étant donné que 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

Peut être utilisé avec la méthode now() pour obtenir l'heure actuelle date et heure. 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 pour passer un fuseau horaire valide comme paramètres :


// 直接使用字符串
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() , les fonctions statiques telles que today() , tomorrow() et yesterday() sont également fourni. Cependant, leurs heures sont 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 de sortie ci-dessus 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 la date en 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 de caractères

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 la date

Vous pouvez également utiliser la méthode parse pour 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 pouvez également construire la date en utilisant une année, un mois et un jour séparés :


$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 , vous pouvez transmettre un fuseau horaire valide comme dernier paramètre.

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 pouvez utiliser 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 précise si la la comparaison peut être égale, la valeur par défaut est vraie :


$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, certaines 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", que de nombreuses bibliothèques de dates do Cette fonction commune est fournie. Une fois la date analysée, il existe quatre possibilités :

1. Lorsque l'heure comparée 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

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


  • Il y a 1 heure

  • Il y a 5 mois

4、当比较的值在另一个值之后

  • 1小时后

  • 5月后

你可以把第二个参数设置为 true 来删除“前”、“距现在”等修饰语: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周

本地化

可以在 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