下面由Laravel教程欄目帶大家推薦介紹關(guān)于Laravel Carbon 擴展包,希望對大家有所幫助!
-
Introduction
Carbon *繼承了PHP的 *Datetime *類和JsonSerialiable。所以 *Carbon *中沒有涉及到的,但在 *Datetime *和JsonSerializable*中已經(jīng)實現(xiàn)的方法都是可以使用的。
class Carbon extends DateTime implements JsonSerializable { //code here}
Carbon 類聲明在 Carbon 命名空間下,可以通過引入命名空間的方式來代替每次輸入完整的類名。
<?php use CarbonCarbon;
要特別留意是否使用了正確的時區(qū),比如的所有差異比較都使用或者系統(tǒng)設(shè)定的時區(qū)
$dtToronto = Carbon::create(2012, 1, 1, 0, 0, 0, 'America/Toronto'); $dtVancouver = Carbon::create(2012, 1, 1, 0, 0, 0, 'America/Vancouver'); echo $dtVancouver->diffInHours($dtToronto); //
以上進行的時間比較是在提供的 Carbon 實例所在的時區(qū)下完成的。例如作者所在的時區(qū)為 東京時間減13 小時,因此在下午一點后。Carbon::now(‘Asia/Tokyo’)->isToday() 將會返回 false ,如果在調(diào)用 now() 時設(shè)置時區(qū)為東京時區(qū),接下來的操作都使用東京時區(qū)是說不過去的。所以在與 *now() *創(chuàng)建的實例進行比較時,默認是在當前時區(qū)下完成的。
-
Instantiation
有幾種不同的方法可以創(chuàng)建一個新的Carbon實例。首先是構(gòu)造函數(shù)。它覆蓋父構(gòu)造函數(shù),您最好閱讀PHP手冊中的第一個參數(shù),并了解它所接受的日期/時間字符串格式。您可能會發(fā)現(xiàn)自己很少使用構(gòu)造函數(shù),而是依賴于顯式靜態(tài)方法來提高可讀性
$carbon = new Carbon(); // 等同于 Carbon::now() $carbon = new Carbon('first day of January 2008', 'America/Vancouver'); echo get_class($carbon); // 'CarbonCarbon' $carbon = Carbon::now(-5);//1表示英國倫敦,2表示法國巴黎
您將在上面注意到,timezone(2nd)參數(shù)是作為字符串和整數(shù)而不是DateTimeZone實例傳遞的。所有DateTimeZone參數(shù)都已被增強,因此您可以將一個DateTimeZone實例、字符串或整型偏移量傳遞給GMT,并為您創(chuàng)建時區(qū)。在下一個示例中再次顯示了這一點,該示例還介紹了now()函數(shù)。
$nowInLondonTz = Carbon::now(new DateTimeZone('Europe/London')); // 或者以字符串形式只傳時區(qū) $nowInLondonTz = Carbon::now('Europe/London');// 或者在DST期間創(chuàng)建一個時區(qū)為+1到GMT的日期,然后傳遞一個整數(shù)echo Carbon::now(1)->tzName; // Europe/London
如果您真的喜歡您的動態(tài)方法調(diào)用,并且對使用構(gòu)造函數(shù)時所需的額外的行或難看的括號感到失望,那么您將喜歡parse方法。
echo (new Carbon('first day of December 2008'))->addWeeks(2); // 2008-12-15 00:00:00 echo Carbon::parse('first day of December 2008')->addWeeks(2); // 2008-12-15 00:00:00
NOTE*:在PHP 5.4* 之前(new MyClass())->method()會報語法錯誤**, 如果你使用**PHP 5.3, 你需要創(chuàng)建一個變量然后再調(diào)用方法:
$date = new Carbon('first day of December 2008'); echo $date->addWeeks(2);
傳遞給Carbon:::parse或new Carbon的字符串可以表示相對時間(next sunday, tomorrow, first day of next month, last year)或絕對時間(first day of December 2008, 2017-01-06)。您可以用Carbon::hasRelativeKeywords()測試一個字符串是否會產(chǎn)生一個相對或絕對日期。
$string = 'first day of next month'; if (strtotime($string) === false) { echo "'$string' is not a valid date/time string."; } elseif (Carbon::hasRelativeKeywords($string)) { echo "'$string' is a relative valid date/time string, it will returns different dates depending on the current date."; } else { echo "'$string' is an absolute date/time string, it will always returns the same date."; }
為了配合now(),還存在一些靜態(tài)的實例化助手來創(chuàng)建廣為人知的實例。這里唯一需要注意的是,today()、tomorrow()和yesterday()除了按照預(yù)期的行為,都接受一個時區(qū)參數(shù),每個參數(shù)的時間值都設(shè)置為00:00:00。
$now = Carbon::now(); echo $now; // 2018-07-26 16:25:49 $today = Carbon::today(); echo $today; // 2018-07-26 00:00:00 $tomorrow = Carbon::tomorrow('Europe/London'); echo $tomorrow; // 2018-07-27 00:00:00 $yesterday = Carbon::yesterday(); echo $yesterday; // 2018-07-25 00:00:00
下一組靜態(tài)助手是createXXX() 函數(shù)。大多數(shù)靜態(tài)create函數(shù)允許您提供許多個或少量的參數(shù),并為所有其他參數(shù)提供默認值。通常默認值是當前日期、時間或時區(qū)。更高的值將適當?shù)匕b,但無效的值將拋出一個InvalidArgumentException,并附帶一條信息。錯誤消息從DateTime:::getLastErrors()調(diào)用中獲取。
Carbon::createFromDate($year, $month, $day, $tz); Carbon::createFromTime($hour, $minute, $second, $tz); Carbon::createFromTimeString("$hour:$minute:$second", $tz); Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);
createFromDate() 的默認值是當前時間. createFromTime() 默認值是今天. create()如果不傳參數(shù)也是當前時間. 與前面一樣,$tz默認設(shè)置為當前時區(qū),否則可以是DateTimeZone實例,也可以是字符串時區(qū)值。默認值(模擬底層PHP庫)的唯一特殊情況發(fā)生在指定了小時值但沒有分鐘或秒時,它們將默認為0。
注:***createFromTime()** will default the date to today**。小編經(jīng)實戰(zhàn)代碼打印出來發(fā)現(xiàn)**createFromTime()**的默認值也是當前時間,不是今天(時分秒并不是**00:00:00**)。***
$xmasThisYear = Carbon::createFromDate(null, 12, 25); // Year默認值是今年 $Y2K = Carbon::create(2000, 1, 1, 0, 0, 0); // 等價于Carbon::createMidnightDate(2000, 1, 1) $alsoY2K = Carbon::create(1999, 12, 31, 24); $noonLondonTz = Carbon::createFromTime(12, 0, 0, 'Europe/London'); $teaTime = Carbon::createFromTimeString('17:00:00', 'Europe/London'); // A two digit minute could not be found try { Carbon::create(1975, 5, 21, 22, -2, 0); } catch(InvalidArgumentException $x) { echo $x->getMessage()}
創(chuàng)建異常發(fā)生在使用負值上,而不是在溢出上,要獲取溢出上的異常,請使用createSafe()
echo Carbon::create(2000, 1, 35, 13, 0, 0);// 2000-02-04 13:00:00 //(1月有31天,4天自動加上去轉(zhuǎn)換成了2月4號) try { Carbon::createSafe(2000, 1, 35, 13, 0, 0); } catch (CarbonExceptionsInvalidDateException $exp) { echo $exp->getMessage(); }// 會報錯:day : 35 is not a valid value.
NOTE1:2018-02-29會產(chǎn)生一個異常,而2020-02-29不會產(chǎn)生異常,因為2020年是閏年。
NOTE2:Carbon::createSafe(2014,3,30,1,30,0,’Europe/London’);從PHP 5.4開始也會產(chǎn)生一個異常,因為在夏令時跳過一個小時,但是在PHP 5.4之前,它只會創(chuàng)建這個無效的日期。
Carbon::createFromFormat($format, $time, $tz);
createFromFormat()是最基本的php函數(shù)DateTime:::createFromFormat的包裝器。不同的是,$tz參數(shù)可以是DateTimeZone實例或字符串時區(qū)值。此外,如果格式有錯誤,這個函數(shù)將調(diào)用DateTime::getLastErrors()方法,然后拋出一個InvalidArgumentException,錯誤作為消息。如果您查看上面的createXX()函數(shù)的源代碼,它們都會調(diào)用createFromFormat()。
echo Carbon::createFromFormat('Y-m-d H', '1975-05-21 22')->toDateTimeString(); // 1975-05-21 22:00:00
最后三個create函數(shù)用于使用unix時間戳。第一個將創(chuàng)建一個與給定的時間戳相等的Carbon實例,并將設(shè)置時區(qū)或默認為當前時區(qū)。第二個createFromTimestampUTC()是不同的,因為時區(qū)將保持UTC(GMT)。第二種方法與Carbon: createFromFormat(‘@’.$timestamp)的作用相同,但我只是讓它更明確了一點。第三個是createFromTimestampMs(),它接受以毫秒而不是秒為單位的時間戳。也允許使用負時間戳。
echo Carbon::createFromTimestamp(-1)->toDateTimeString(); // 1969-12-31 18:59:59 echo Carbon::createFromTimestamp(-1, 'Europe/London')->toDateTimeString(); // 1970-01-01 00:59:59 echo Carbon::createFromTimestampUTC(-1)->toDateTimeString(); // 1969-12-31 23:59:59echo Carbon::createFromTimestampMs(1)->format('Y-m-dTH:i:s.uP T'); // 1969-12-31T19:00:00.001000-05:00 EST echo Carbon::createFromTimestampMs(1, 'Europe/London')->format('Y-m-dTH:i:s.uP T'); // 1970-01-01T01:00:00.001000+01:00 BST
您還可以copy()在現(xiàn)有Carbon實例上創(chuàng)建。如預(yù)期的那樣,日期、時間和時區(qū)值都被復(fù)制到新實例。
$dt = Carbon::now(); echo $dt->diffInYears($dt->copy()->addYear()); // 1
// $dt 實例沒有改變,任然是Carbon:now()
您可以在現(xiàn)有的Carbon實例上使用nowWithSameTz()來在相同的時區(qū)中獲取一個新的實例。
$meeting = Carbon::createFromTime(19, 15, 00, 'Africa/Johannesburg');// 19:15 in Johannesburg echo 'Meeting starts at '.$meeting->format('H:i').' in Johannesburg.'; // Meeting starts at 19:15 in Johannesburg.// now in Johannesburg echo "It's ".$meeting->nowWithSameTz()->format('H:i').' right now in Johannesburg.'; // It's 09:37 right now in Johannesburg.
最后,如果您發(fā)現(xiàn)自己從另一個庫繼承了DateTime實例,不要害怕!您可以通過友好的instance()方法創(chuàng)建一個Carbon實例?;蛘呤褂酶`活的方法make(),它可以從DateTime、Carbon或string返回一個新的Carbon實例,否則它只返回null。
$dt = new DateTime('first day of January 2008'); // <== instance from another API $carbon = Carbon::instance($dt); echo get_class($carbon); // 'CarbonCarbon' echo $carbon->toDateTimeString(); // 2008-01-01 00:00:00
關(guān)于微秒的簡要說明。PHP DateTime對象允許您設(shè)置一個微秒值,但是忽略它的所有日期數(shù)學(xué)?,F(xiàn)在,1.12.0的Carbon在實例化或復(fù)制操作過程中支持微秒,并在默認情況下使用format()方法。
$dt = Carbon::parse('1975-05-21 22:23:00.123456'); echo $dt->micro; // echo $dt->copy()->micro; //
在PHP 7.1之前 DateTime微秒未添加到“now”實例,并且之后不能更改,這意味著:
$date = new DateTime('now'); echo $date->format('u'); // display current microtime in PHP >= 7.1 (expect a bug in PHP 7.1.3 only)// display 000000 before PHP 7.1 $date = new DateTime('2001-01-01T00:00:00.123456Z'); echo $date->format('u'); // display 123456 in all PHP versions$date->modify('00:00:00.987654');echo $date->format('u');// display 987654 in PHP >= 7.1// display 123456 before PHP 7.1
為了解決這個限制,我們在PHP < 7.1中調(diào)用了microseconds,但是這個特性在需要時可以被禁用(PHP >= 7.1):
Carbon::useMicrosecondsFallback(false);var_dump(Carbon::isMicrosecondsFallbackEnabled()); // false echo Carbon::now()->micro; // 0 in PHP < 7.1, microtime in PHP >= 7.1Carbon::useMicrosecondsFallback(true); // default value var_dump(Carbon::isMicrosecondsFallbackEnabled()); // trueecho Carbon::now()->micro; // microtime in all PHP version
是否需要遍歷一些日期以找到最早或最近的日期?不知道如何設(shè)置初始最大值/最小值?現(xiàn)在有兩個助手可以幫助你做出簡單的決定:
echo Carbon::maxValue(); // '9999-12-31 23:59:59'echo Carbon::minValue(); // '0001-01-01 00:00:00'
最小和最大值主要取決于系統(tǒng)(32位或64位)。
使用32位OS系統(tǒng)或32位版本的PHP(您可以在PHP中使用PHP_INT_SIZE == 4來檢查它),最小值是0-unix-timestamp(1970-01-01 00:00:00),最大值是常量PHP_INT_MAX給出的時間戳。
使用64位OS系統(tǒng)和64位PHP版本,最小值為01-01 00:00,最大值為9999-12-31 23:59:59。
-
Localization
不幸的是,基類DateTime沒有任何本地化支持。為了開始本地化支持,還添加了一個formatLocalized($format)方法。實現(xiàn)使用當前實例時間戳對strftime進行調(diào)用。如果您首先使用PHP函數(shù)setlocale()設(shè)置當前的語言環(huán)境,那么返回的字符串將被格式化為正確的語言環(huán)境。
$newLocale = setlocale(LC_TIME, 'German'); if ($newLocale === false) { echo '"German" locale is not installed on your machine, it may have a different name a different name on your machine or you may need to install it.'; }echo $dt->formatLocalized('%A %d %B %Y'); // Mittwoch 21 Mai 1975 setlocale(LC_TIME, 'English'); echo $dt->formatLocalized('%A %d %B %Y'); // Wednesday 21 May 1975 setlocale(LC_TIME, ''); // reset locale
diffForHumans()也被定位。您可以通過使用靜態(tài)Carbon::setLocale()函數(shù)來設(shè)置Carbon locale(),并使用Carbon::getLocale()獲取當前的設(shè)置。
Carbon::setLocale('de'); echo Carbon::getLocale(); // de echo Carbon::now()->addYear()->diffForHumans(); // in 1 Jahr Carbon::setLocale('en'); echo Carbon::getLocale(); // en
或者,您可以將一些代碼與給定的語言環(huán)境隔離:
Carbon::executeWithLocale('de', function ($newLocale) { // You can optionally get $newLocale as the first argument of the closure // It will be set to the new locale or false if the locale was not found. echo Carbon::now()->addYear()->diffForHumans(); }); // in 1 Jahr // outside the function the locale did not change echo Carbon::getLocale(); // en // or same using a return statement$french = Carbon::executeWithLocale('fr', function () {return Carbon::now()->addYear()->diffForHumans();}); echo $french; // dans 1 an
有些語言需要打印utf8編碼(主要以. utf8結(jié)尾的語言環(huán)境包)。在本例中,您可以使用靜態(tài)方法"php
Carbon::setUtf8()對對utf8字符集的formatlocalized()調(diào)用的結(jié)果進行編碼。 setlocale(LC_TIME, 'Spanish'); $dt = Carbon::create(2016, 01, 06, 00, 00, 00); Carbon::setUtf8(false); echo $dt->formatLocalized('%A %d %B %Y'); // mi?rcoles 06 enero 2016 Carbon::setUtf8(true); echo $dt->formatLocalized('%A %d %B %Y'); // miércoles 06 enero 2016 Carbon::setUtf8(false); setlocale(LC_TIME, '');
在Linux上
如果您在翻譯方面有問題,請檢查系統(tǒng)中安裝的地區(qū)(本地和生產(chǎn))。
區(qū)域設(shè)置-列出已啟用的區(qū)域設(shè)置。
sudo locale-gen fr_FR。UTF-8安裝一個新的語言環(huán)境。
sudo dpkg-reconfigure locale來發(fā)布所有啟用的locale。
并重啟系統(tǒng)。
您可以通過以下方式自定義現(xiàn)有語言:
Carbon::setLocale('en'); $translator = Carbon::getTranslator(); $translator->setMessages('en', array( 'day' => ':count boring day|:count boring days', )); $date1 = Carbon::create(2018, 1, 1, 0, 0, 0); $date2 = Carbon::create(2018, 1, 4, 4, 0, 0); echo $date1->diffForHumans($date2, true, false, 2); // 3 boring days 4 hours$translator->resetMessages('en'); // reset language customizations for en language
請注意,您還可以使用另一個轉(zhuǎn)換器Carbon::setTranslator($custom),只要給定的轉(zhuǎn)換器繼承了SymfonyComponentTranslationTranslatorInterface。 因此,對格式本地化、getter(如localeMonth、localedayayofweek和短變體)的語言環(huán)境支持是由安裝在操作系統(tǒng)中的語言環(huán)境驅(qū)動的。對于其他翻譯,由于碳社區(qū)的支持,它在內(nèi)部得到了支持。您可以使用以下方法檢查支持的內(nèi)容:
echo implode(', ', array_slice(Carbon::getAvailableLocales(), 0, 3)).'...'; // af, ar, ar_Shakl... // Support diff syntax (before, after, from now, ago) var_dump(Carbon::localeHasDiffSyntax('en')); // bool(true) var_dump(Carbon::localeHasDiffSyntax('zh_TW')); // bool(true) // Support 1-day diff words (just now, yesterday, tomorrow) var_dump(Carbon::localeHasDiffOneDayWords('en')); // bool(true) var_dump(Carbon::localeHasDiffOneDayWords('zh_TW')); // bool(false) // Support 2-days diff words (before yesterday, after tomorrow)var_dump(Carbon::localeHasDiffTwoDayWords('en')); // bool(true) var_dump(Carbon::localeHasDiffTwoDayWords('zh_TW')); // bool(false) // Support short units (1y = 1 year, 1mo = 1 month, etc.) var_dump(Carbon::localeHasShortUnits('en')); // bool(true)var_dump(Carbon::localeHasShortUnits('zh_TW')); // bool(false)// Support period syntax (X times, every X, from X, to X)var_dump(Carbon::localeHasPeriodSyntax('en')); // bool(true)var_dump(Carbon::localeHasPeriodSyntax('zh_TW')); // bool(false)
以下是最后一個碳版本支持的73個地區(qū)的概述:
注意,如果您使用Laravel 5.5+,語言環(huán)境將根據(jù)當前的最后一個App:setLocale execution自動設(shè)置。所以擴散人類將是透明的。您可能仍然需要在某些中間件中運行setlocale以使formatlocalizedworking正確。
-
Testing Aids
測試方法允許您在創(chuàng)建“現(xiàn)在”實例時設(shè)置要返回的Carbon實例(real或mock)。所提供的實例將在以下條件下具體返回:
對static now()方法的調(diào)用,例如:now()
當一個空(或空字符串)被傳遞給構(gòu)造函數(shù)或parse()時,ex.new Carbon(空)
當字符串“now”傳遞給構(gòu)造函數(shù)或parse()時,ex. new Carbon(‘now’)
給定的實例也將作為diff方法的默認相對時間。
$knownDate = Carbon::create(2001, 5, 21, 12); // create testing date Carbon::setTestNow($knownDate); // set the mock (of course this could be a real mock object) echo Carbon::getTestNow(); // 2001-05-21 12:00:00 echo Carbon::now(); // 2001-05-21 12:00:00 echo new Carbon(); // 2001-05-21 12:00:00 echo Carbon::parse(); // 2001-05-21 12:00:00 echo new Carbon('now'); // 2001-05-21 12:00:00 echo Carbon::parse('now'); // 2001-05-21 12:00:00 echo Carbon::create(2001, 4, 21, 12)->diffForHumans(); // 1 month agovar_dump(Carbon::hasTestNow()); // bool(true) Carbon::setTestNow(); // clear the mock var_dump(Carbon::hasTestNow()); // bool(false)echo Carbon::now(); // 2018-07-05 03:37:12
一個更有意義的完整例子:
class SeasonalProduct { protected $price; public function __construct($price) { $this->price = $price; } public function getPrice() { $multiplier = 1; if (Carbon::now()->month == 12) { $multiplier = 2; } return $this->price * $multiplier;}} $product = new SeasonalProduct(100); Carbon::setTestNow(Carbon::parse('first day of March 2000')); echo $product->getPrice(); //Carbon::setTestNow(Carbon::parse('first day of December 2000')); echo $product->getPrice(); // Carbon::setTestNow(Carbon::parse('first day of May 2000')); echo $product->getPrice(); // Carbon::setTestNow();
根據(jù)給定的“now”實例,還可以對相關(guān)短語進行嘲笑。
$knownDate = Carbon::create(2001, 5, 21, 12); // create testing date Carbon::setTestNow($knownDate); // set the mock echo new Carbon('tomorrow'); // 2001-05-22 00:00:00 ... notice the time ! echo new Carbon('yesterday'); // 2001-05-20 00:00:00 echo new Carbon('next wednesday'); // 2001-05-23 00:00:00 echo new Carbon('last friday'); // 2001-05-18 00:00:00 echo new Carbon('this thursday'); // 2001-05-24 00:00:00 Carbon::setTestNow(); // always clear it !
被認為是相對修飾語的單詞列表如下:
- +
- –
- ago
- first
- next
- last
- this
- today
- tomorrow
- yesterday
請注意,與next()、previous()和modify()方法類似,這些相對修飾符中的一些將把時間設(shè)置為00:00。
Carbon: parse($time, $tz)和new Carbon($time, $tz)都可以將時區(qū)作為第二個參數(shù)。 echo Carbon::parse('2012-9-5 23:26:11.223', 'Europe/Paris')->timezone->getName(); // Europe/Paris
-
Getters
getter方法是通過PHP的__get()方法實現(xiàn)的。這使您能夠像訪問屬性而不是函數(shù)調(diào)用那樣訪問值。
$dt = Carbon::parse('2012-10-5 23:26:11.123789'); // 這些getter方法都將返回int類型 var_dump($dt->year); // int(2012)var_dump($dt->month); // int(10) var_dump($dt->day); // int(5) var_dump($dt->hour); // int(23) var_dump($dt->minute); // int(26) var_dump($dt->second); // int(11)var_dump($dt->micro); // int(123789)// dayOfWeek 返回一個數(shù)值 0 (sunday) 到 6 (saturday) var_dump($dt->dayOfWeek); // int(5)// dayOfWeekIso 返回一個數(shù)值 1 (monday) 到 7 (sunday) var_dump($dt->dayOfWeekIso); // int(5) setlocale(LC_TIME, 'German');var_dump($dt->englishDayOfWeek); // string(6) "Friday"var_dump($dt->shortEnglishDayOfWeek); // string(3) "Fri"var_dump($dt->localeDayOfWeek); // string(7) "Freitag"var_dump($dt->shortLocaleDayOfWeek); // string(2) "Fr"var_dump($dt->englishMonth); // string(7) "October"var_dump($dt->shortEnglishMonth); // string(3) "Oct"var_dump($dt->localeMonth); // string(7) "Oktober"var_dump($dt->shortLocaleMonth); // string(3) "Okt"setlocale(LC_TIME, '');var_dump($dt->dayOfYear); // int(278)var_dump($dt->weekNumberInMonth);// weekNumberInMonth consider weeks from monday to sunday, so the week 1 will// contain 1 day if the month start with a sunday, and up to 7 if it starts with a mondayvar_dump($dt->weekOfMonth); // int(1)// weekOfMonth will returns 1 for the 7 first days of the month, then 2 from the 8th to// the 14th, 3 from the 15th to the 21st, 4 from 22nd to 28th and 5 above var_dump($dt->weekOfYear); // int(40) var_dump($dt->daysInMonth); // int(31) var_dump($dt->timestamp); // int(1349493971) var_dump(Carbon::createFromDate(1975, 5, 21)->age); // int(43) calculated vs now in the same tzvar_dump($dt->quarter); // int(4) // Returns an int of seconds difference from UTC (+/- sign included) var_dump(Carbon::createFromTimestampUTC(0)->offset); // int(0) var_dump(Carbon::createFromTimestamp(0)->offset); // int(-18000) // Returns an int of hours difference from UTC (+/- sign included) var_dump(Carbon::createFromTimestamp(0)->offsetHours); // int(-5)// Indicates if day light savings time is on var_dump(Carbon::createFromDate(2012, 1, 1)->dst); // bool(false) var_dump(Carbon::createFromDate(2012, 9, 1)->dst); // bool(true) // Indicates if the instance is in the same timezone as the local timezone var_dump(Carbon::now()->local); // bool(true)var_dump(Carbon::now('America/Vancouver')->local); // bool(false)// Indicates if the instance is in the UTC timezonevar_dump(Carbon::now()->utc); // bool(false) var_dump(Carbon::now('Europe/London')->utc); // bool(false) var_dump(Carbon::createFromTimestampUTC(0)->utc); // bool(true) // Gets the DateTimeZone instanceecho get_class(Carbon::now()->timezone); // DateTimeZone echo get_class(Carbon::now()->tz); // DateTimeZone// Gets the DateTimeZone instance name, shortcut for ->timezone->getName()echo Carbon::now()->timezoneName; // America/Toronto echo Carbon::now()->tzName; // America/Toronto
-
Setters
下面的setter是通過PHP的__set()方法實現(xiàn)的。值得注意的是,除了顯式地設(shè)置時區(qū)之外,任何設(shè)置程序都不會更改實例的時區(qū)。具體地說,設(shè)置時間戳不會將相應(yīng)的時區(qū)設(shè)置為UTC。
$dt = Carbon::now();$dt->year = 1975; $dt->month = 13; //強制 year++ 然后 month = 1 $dt->month = 5; $dt->day = 21; $dt->hour = 22; $dt->minute = 32; $dt->second = 5; $dt->timestamp = 169957925; // 這不會改變時區(qū) // 通過DateTimeZone實例或字符串設(shè)置時區(qū) $dt->timezone = new DateTimeZone('Europe/London');$dt->timezone = 'Europe/London';$dt->tz = 'Europe/London';
-
Fluent Setters
對于setter沒有可選參數(shù),但是函數(shù)定義中有足夠的多樣性,因此無論如何都不需要它們。值得注意的是,除了顯式地設(shè)置時區(qū)之外,任何設(shè)置程序都不會更改實例的時區(qū)。具體地說,設(shè)置時間戳不會將相應(yīng)的時區(qū)設(shè)置為UTC。
$dt = Carbon::now();$dt->year(1975)->month(5)->day(21)->hour(22)->minute(32)->second(5)->toDateTimeString(); $dt->setDate(1975, 5, 21)->setTime(22, 32, 5)->toDateTimeString(); $dt->setDate(1975, 5, 21)->setTimeFromTimeString('22:32:05')->toDateTimeString(); $dt->setDateTime(1975, 5, 21, 22, 32, 5)->toDateTimeString(); $dt->timestamp(169957925)->timezone('Europe/London'); $dt->tz('America/Toronto')->setTimezone('America/Vancouver');
您還可以將日期和時間與其他DateTime/Carbon對象分開設(shè)置:
$source1 = new Carbon('2010-05-16 22:40:10'); $dt = new Carbon('2001-01-01 01:01:01'); $dt->setTimeFrom($source1);echo $dt; // 2001-01-01 22:40:10 $source2 = new DateTime('2013-09-01 09:22:56');$dt->setDateFrom($source2);echo $dt; // 2013-09-01 22:40:10
-
IsSet
實現(xiàn)了PHP函數(shù)isset()。這是在一些外部系統(tǒng)(例如Twig)在使用屬性之前驗證屬性的存在時完成的。這是使用isset()或empty()方法完成的。在PHP站點:isset()、isset()、empty()上,您可以閱讀