Heim > Artikel > Backend-Entwicklung > Carbon, ein Datums- und Zeitverarbeitungspaket in Laravel
Bei der Verarbeitung von Datums- und Uhrzeitangaben sind viele Dinge zu beachten, z. B. Datumsformat, Zeitzone, Schaltjahr und Monate mit unterschiedlichen Tagen. Es ist zu leicht, selbst Fehler zu machen. Der folgende Artikel stellt Ihnen hauptsächlich das Datum vor Zeitverarbeitung in Laravel. Freunde, die die einfache Verwendung von Carbon benötigen, können darauf zurückgreifen.
Vorwort
Wir alle müssen uns beim Schreiben von PHP-Anwendungen oft mit Datums- und Uhrzeitangaben auseinandersetzen. In diesem Artikel erfahren Sie mehr über Carbon. geerbt von einer API-Erweiterung der PHP-DateTime-Klasse, die die Arbeit mit Datums- und Uhrzeitangaben vereinfacht.
Die in Laravel standardmäßig verwendete Zeitverarbeitungsklasse ist Carbon.
<?php namespace Carbon; class Carbon extends \DateTime { // code here }
Sie können den oben deklarierten Codeausschnitt in der Carbon-Klasse im Carbon-Namespace sehen.
Installation
Carbon kann über Composer installiert werden:
composer require nesbot/carbon
PS: Da das Laravel-Projekt dieses Paket standardmäßig installiert hat, besteht keine Notwendigkeit, den obigen Befehl erneut auszuführen.
Um
zu verwenden, müssen Sie Carbon über den Namespace importieren, um es verwenden zu können, ohne jedes Mal den vollständigen Namen anzugeben.
use Carbon\Carbon;
Erhalten Sie die aktuelle Uhrzeit
Sie können das aktuelle Datum und die aktuelle Uhrzeit mit der Methode now() abrufen. Wenn Sie kein Argument angeben, wird die Zeitzone aus der PHP-Konfiguration verwendet:
<?php echo Carbon::now(); //2016-10-14 20:21:20 ?>
Wenn Sie eine andere Zeitzone verwenden möchten, müssen Sie eine gültige Zeitzone als Argument übergeben :
// 直接使用字符串 echo Carbon::now('Europe/London'); //2016-10-14 20:21:20 // 或者 echo Carbon::now(new DateTimeZone('Europe/London'));
Zusätzlich zu now()
bietet es auch statische Funktionen wie today()
, tomorrow()
und yesterday()
. Ihre Zeiten sind jedoch alle 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
Die obige Ausgabe Das Ergebnis ist tatsächlich ein Datums- und Zeitobjekt vom Typ Carbon:
Carbon {#179 ▼ +"date": "2016-06-14 00:00:00.000000" +"timezone_type": 3 +"timezone": "UTC" }
Um ein Datum vom Typ Zeichenfolge zu erhalten, können Sie den folgenden Code verwenden:
echo Carbon::today()->toDateTimeString(); echo Carbon::yesterday()->toDateTimeString(); echo Carbon::tomorrow()->toDateTimeString();
Datumstyp in Zeichenfolge konvertieren
Wie oben erwähnt, gibt die Methode von Carbon standardmäßig ein Datums- und Zeitobjekt zurück. Obwohl es sich um ein Objekt handelt, können Sie Echo aufgrund der magischen Methode __toString direkt zur Ausgabe des Ergebnisses verwenden. Wenn Sie es jedoch in eine Zeichenfolge konvertieren möchten, können Sie die Methoden toDateString oder toDateTimeString verwenden:
echo Carbon::now()->toDateString(); //2016-10-14 echo Carbon::now()->toDateTimeString(); //2016-10-14 20:22:50
Datumsanalyse
Sie können auch verwenden Die Parse-Methode Analysiert Daten beliebiger Reihenfolge und Art (das Ergebnis ist ein Datetime-Objekt vom Typ 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
Konstruieren eines Datums
Sie kann auch ein separates Jahr, einen Monat und einen Tag verwenden, um ein Datum zu erstellen:
$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); // 年默认为当前年份
Zusätzlich kann als letztes Argument eine gültige Zeitzone übergeben werden.
Datumsoperationen
Datumsoperationen können durch Addieren (Erhöhen) oder Subtrahieren (Subtrahieren) durchgeführt werden, um mit den zu addierenden oder subtrahierenden Einheiten Schritt zu halten. Wenn Sie beispielsweise einem Datum eine bestimmte Anzahl von Tagen hinzufügen möchten, können Sie die Methode addDays verwenden. Darüber hinaus steht eine Änderungsmethode zur Verfügung. Das Parameterformat ist + oder - gefolgt vom Wert und der Einheit. Wenn Sie also ein Jahr zum aktuellen Datum hinzufügen möchten, können Sie +1 Jahr übergeben:
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
Datumsvergleich
In Carbon you Sie können die folgenden Methoden verwenden, um Datumsangaben zu vergleichen:
min – Gibt das Mindestdatum zurück.
max – Gibt das maximale Datum zurück.
eq – Bestimmt, ob zwei Daten gleich sind.
gt – Bestimmt, ob das erste Datum größer als das zweite Datum ist.
lt – Bestimmt, ob das erste Datum kleiner als das zweite Datum ist.
gte – Bestimmt, ob das erste Datum größer oder gleich dem zweiten Datum ist.
lte – Bestimmt, ob das erste Datum kleiner oder gleich dem zweiten Datum ist.
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)
Um festzustellen, ob ein Datum zwischen zwei Datumsangaben liegt, können Sie die Methode between() verwenden. Der dritte optionale Parameter gibt an, ob der Vergleich gleich sein kann :
$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)
Darüber hinaus werden einige Hilfsmethoden bereitgestellt, deren Bedeutung Sie anhand ihrer Namen verstehen können:
$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
„Vor einem Monat“ ist einfacher zu lesen als „vor 30 Tagen“. Nach dem Parsen des Datums gibt es vier Möglichkeiten:
1 überschreitet die aktuelle Standardzeit
vor 1 Tag
vor 5 Monaten
2. Beim Vergleich der zukünftigen Zeit mit der aktuellen Standardzeit
1 Stunde in der Zukunft
in 5 Monaten
3. Wenn der verglichene Wert einen anderen Wert überschreitet
vor 1 Stunde
5 Monate vor
4. Wenn der verglichene Wert nach einem anderen Wert liegt
1 Stunde später
5 Monate später
Sie können den zweiten Parameter auf true setzen, um Modifikatoren wie „vorher“ und „von jetzt“ zu löschen: 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周
Lokalisierung
可以在 app/Providers/AppServiceProvider.php 的 boot()
方法中添加下面的代码来设置全局本地化:
public function boot() { \Carbon\Carbon::setLocale('zh'); }
设置好之后,在输出时间的地方调用:
$article->created_at->diffForHumans();
类似的格式即可。
更多 Carbon 操作,可查看文档。
Das obige ist der detaillierte Inhalt vonCarbon, ein Datums- und Zeitverarbeitungspaket in Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!