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('Europe/London'); //2016-10-14 20:21:20 // 或者 echo Carbon::now(new DateTimeZone('Europe/London'));
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('Europe/London'); // 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('2016-10-15')->toDateTimeString(); //2016-10-15 00:00:00 echo Carbon::parse('2016-10-15')->toDateTimeString(); //2016-10-15 00:00:00 echo Carbon::parse('2016-10-15 00:10:25')->toDateTimeString(); //2016-10-15 00:10:25 echo Carbon::parse('today')->toDateTimeString(); //2016-10-15 00:00:00 echo Carbon::parse('yesterday')->toDateTimeString(); //2016-10-14 00:00:00 echo Carbon::parse('tomorrow')->toDateTimeString(); //2016-10-16 00:00:00 echo Carbon::parse('2 days ago')->toDateTimeString(); //2016-10-13 20:49:53 echo Carbon::parse('+3 days')->toDateTimeString(); //2016-10-18 20:49:53 echo Carbon::parse('+2 weeks')->toDateTimeString(); //2016-10-29 20:49:53 echo Carbon::parse('+4 months')->toDateTimeString(); //2017-02-15 20:49:53 echo Carbon::parse('-1 year')->toDateTimeString(); //2015-10-15 20:49:53 echo Carbon::parse('next wednesday')->toDateTimeString(); //2016-10-19 00:00:00 echo Carbon::parse('last friday')->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 = '2015'; $month = '04'; $day = '12'; echo Carbon::createFromDate($year, $month, $day); //2015-04-12 20:55:59 $hour = '02'; $minute = '15': $second = '30'; 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('+15 days'); //2016-10-30 14:00:01 echo Carbon::now()->modify('-2 days'); //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, 'America/Vancouver'); 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 'America/Vancouver' 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
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('zh'); }
设置好之后,在输出时间的地方调用:
$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!