国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Carbon中文文檔

banana_pi / 2198人閱讀

摘要:是的日期處理類(lèi)庫(kù)。另外可以默認(rèn)設(shè)置方法所要顯示的時(shí)間日期格式。一些特殊的過(guò)濾方法,像和可以幫助你過(guò)濾時(shí)間差中的或者一個(gè)自定義的時(shí)間間隔。對(duì)于人們來(lái)說(shuō)一月前比天前更加易與理解。中定義了以下常量。

Introduction
Carbon 是php的日期處理類(lèi)庫(kù)(A simple PHP API extension for DateTime.)。
Carbon 繼承了PHP的 Datetime 類(lèi),所以 Carbon 中沒(méi)有涉及到的,但在 Datetime 中已經(jīng)實(shí)現(xiàn)的方法都是可以使用的。

Carbon 類(lèi)聲明在 Carbon 命名空間下,可以通過(guò)引入命名空間的方式來(lái)代替每次輸入完整的類(lèi)名。


Note:如果在使用 Carbon 時(shí),沒(méi)有專(zhuān)門(mén)設(shè)置時(shí)區(qū)的話,默認(rèn)使用 America/Toronto 的時(shí)區(qū)。

要特別留意是否使用了正確的時(shí)區(qū),比如 Carbon 的所有差異比較都使用 UTC 或者系統(tǒng)設(shè)定的時(shí)區(qū)。

diffInHours($dtToronto); // 3

以上進(jìn)行的時(shí)間比較是在提供的 Carbon 實(shí)例所在的時(shí)區(qū)下完成的。例如作者所在的時(shí)區(qū)為 東京時(shí)間減13 小時(shí),因此在下午一點(diǎn)后。Carbon::now(‘Asia/Tokyo’)->isToday() 將會(huì)返回 false ,如果在調(diào)用 now() 時(shí)設(shè)置時(shí)區(qū)為東京時(shí)區(qū),接下來(lái)的操作都使用東京時(shí)區(qū)是說(shuō)不過(guò)去的。所以在與 now() 創(chuàng)建的實(shí)例進(jìn)行比較時(shí),默認(rèn)是在當(dāng)前時(shí)區(qū)下完成的。

Instantiation

有好幾種方式可以創(chuàng)建 Carbon 的實(shí)例,但是大家應(yīng)該更傾向于通過(guò)這種語(yǔ)義化的靜態(tài)方法來(lái)實(shí)現(xiàn)。


值得注意的是,Carbon 構(gòu)造器的第二個(gè)參數(shù)被增強(qiáng)到了不僅限于是 DateTimeZone 實(shí)例,還可以是 String、Integer (表示相對(duì)于GMT的偏移值)。舉個(gè)栗子來(lái)說(shuō)明下 now() 方法。

tzName;             // Europe/London

你將會(huì)喜歡上用 parse() 方法來(lái)代替原有繁瑣的構(gòu)造方式

addWeeks(2);     // 2008-12-15 00:00:00
echo Carbon::parse("first day of December 2008")->addWeeks(2);    // 2008-12-15 00:00:00

類(lèi)似 now() 這樣直接返回 Carbon 實(shí)例的方法還有 today(), tomorrow(),yesterday(),他們都接受一個(gè) timezone 類(lèi)型的參數(shù),最后得到的結(jié)果時(shí)間部分都是 00:00:00


下面是一些其他的 creatXXX() 形式的靜態(tài)方法。絕大多數(shù)靜態(tài)方法的參數(shù)是可傳可不傳的,如果不傳的話會(huì)使用方法預(yù)設(shè)的默認(rèn)值,這些預(yù)設(shè)值一般都是針對(duì)當(dāng)前日期、時(shí)間、時(shí)區(qū)的。如果為傳遞某個(gè)必要參數(shù),會(huì)拋出一個(gè) InvalidArgumentException 類(lèi)型的異常,用 DateTime::getLastErrors() 方法可以得到異常的詳細(xì)信息。


createFromDate() 默認(rèn)返回當(dāng)前時(shí)間,createFromTime()日期默認(rèn)是今天。crete() 所有為 null 的參數(shù)都將默認(rèn)為當(dāng)前對(duì)應(yīng)的時(shí)間。同樣,時(shí)區(qū)也默認(rèn)是當(dāng)前時(shí)區(qū)。如果只設(shè)置了小時(shí)數(shù)沒(méi)有設(shè)置分秒那么分秒默認(rèn)是 0

getMessage(); 
}

createFromFormat() 與php的DateTime::createFromFormat。不同之處是 $dt 參數(shù)可以是 DateTImeZone 的實(shí)例或者一個(gè)時(shí)區(qū)的字符串。并且可以會(huì)返回參數(shù)異常的提示。從createXX()的源碼可以看出,他們都調(diào)用了createFromFormat()方法。

toDateTimeString(); // 1975-05-21 22:00:00

最后提到的這兩個(gè)create方法都是處理Unix時(shí)間戳的。第一個(gè)將會(huì)返回一個(gè)等于預(yù)期時(shí)間戳的 Carbon 實(shí)例,時(shí)區(qū)可以設(shè)置也可以選用默認(rèn)值。第二個(gè)方法,createFromTimestampUTC() 與第一個(gè)不同的是時(shí)區(qū)將始終是 UTC(GMT) .第一個(gè)方法的第二個(gè)示例,只是為了讓這個(gè)函數(shù)的用法展現(xiàn)的更加明確。Negative timestamps are also allowed.

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:59

copy() 方法可以copy一個(gè)已經(jīng)存在的 Carbon 實(shí)例。對(duì)copy生成實(shí)例進(jìn)行修改并不會(huì)影響被copy對(duì)象的本身。

diffInYears($dt->copy()->addYear());  // 1

// $dt was unchanged and still holds the value of Carbon:now()

最后,當(dāng)你正在使用的 DateTime 實(shí)例是通過(guò)實(shí)例化其他繼承了 DateTime 庫(kù)而得到的,別怕!通過(guò)下邊的方式仍然可以極其友好創(chuàng)建 Carbon 實(shí)例。

toDateTimeString();                      // 2008-01-01 00:00:00

關(guān)于毫秒的一些處理。php自帶的 DateTime 類(lèi)也可以設(shè)置毫秒,但是在進(jìn)行日期的數(shù)學(xué)預(yù)算時(shí)并不會(huì)考慮毫秒。從 Carbon 1.12.0版本起,實(shí)例化、copy也能像 format() 方法一樣支持毫秒(PHP默認(rèn)的只有 Datetime::format() 支持毫秒)。

micro;                                       // 123456
echo $dt->copy()->micro;                               // 123456

獲取PHP支持的有效時(shí)間取值范圍:最早時(shí)間、最晚時(shí)間


Localization

Carbon中,formatLocalized() 方法通過(guò)調(diào)用 strftime() 方法,彌補(bǔ)了php底層的 DateTime 類(lèi)不支持區(qū)域化設(shè)置的缺陷。如果你已經(jīng)通過(guò)使用 setlocale() 方法設(shè)置過(guò)當(dāng)前區(qū)域,formatLocalized($format) 方法將會(huì)按照設(shè)置的區(qū)域格式進(jìn)行返回。

formatLocalized("%A %d %B %Y");          // Mittwoch 21 Mai 1975
setlocale(LC_TIME, "");
echo $dt->formatLocalized("%A %d %B %Y");          // Wednesday 21 May 1975

diffForHumans() 的結(jié)果也會(huì)被轉(zhuǎn)化成區(qū)域語(yǔ)言。通過(guò)Carbon::setLocale() 方法可以設(shè)置 Carbon 的區(qū)域語(yǔ)言。

addYear()->diffForHumans();    // in 1 Jahr

Carbon::setLocale("en");
注意:如果在linux系統(tǒng)中轉(zhuǎn)換出現(xiàn)了問(wèn)題,請(qǐng)仔細(xì)檢查安裝在本地或生產(chǎn)系統(tǒng)中語(yǔ)言環(huán)境。
locale -a 列舉出所有可用的語(yǔ)言環(huán)境
sudo locale-gen zh_CN.utf8 安裝新的語(yǔ)言環(huán)境
sudo dpkg-reconfigure locales 配置啟用新的語(yǔ)言環(huán)境,并重啟
Testing Aids()

通過(guò)測(cè)試方法可以得到一個(gè)模擬或真實(shí)的 Carbon 實(shí)例。只有在一下情況下,主動(dòng)提供的 Carbon 實(shí)例才會(huì)被特殊處理:

調(diào)用靜態(tài)方法 now(),例如: Varbon::now()

傳給 construct 或 parse() 方法的是 null (或空字符串),例如:new Carbon(null)

當(dāng)傳給 construct 或 parse()的是字符串 now,例如:new Carbon(‘now’)

$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::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
var_dump(Carbon::hasTestNow());                        // bool(true)
Carbon::setTestNow();                                  // clear the mock
var_dump(Carbon::hasTestNow());                        // bool(false)
echo Carbon::now();    

有用的例子:

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();                                             // 100
Carbon::setTestNow(Carbon::parse("first day of December 2000"));
echo $product->getPrice();                                             // 200
Carbon::setTestNow(Carbon::parse("first day of May 2000"));
echo $product->getPrice();                                             // 100
Carbon::setTestNow();

一些相關(guān)的用法也可以得到一個(gè)模擬的 now 實(shí)例,返回相應(yīng)的模擬數(shù)據(jù)。

$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();      

以下是當(dāng)前支持的時(shí)間轉(zhuǎn)換字

this

net

last

this

next

last

tomorrow

yesterday

+

-

first

last

ago

值得注意的是像 next() , previous() 和 modify() 方法等相關(guān)的修改會(huì)把日期的時(shí)間部分設(shè)置成 00:00:00 。

Getters

獲取器通過(guò)PHP的 __get() 方式實(shí)現(xiàn)。可以直接通過(guò)一下方式直接獲取到屬性的值。

$dt = Carbon::parse("2012-9-5 23:26:11.123789");

// These getters specifically return integers, ie intval()
var_dump($dt->year);                                         // int(2012)
var_dump($dt->month);                                        // int(9)
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)
var_dump($dt->dayOfWeek);                                    // int(3)
var_dump($dt->dayOfYear);                                    // int(248)
var_dump($dt->weekOfMonth);                                  // int(1)
var_dump($dt->weekOfYear);                                   // int(36)
var_dump($dt->daysInMonth);                                  // int(30)
var_dump($dt->timestamp);                                    // int(1346901971)
var_dump(Carbon::createFromDate(1975, 5, 21)->age);          // int(41) calculated vs now in the same tz
var_dump($dt->quarter);                                      // int(3)

// 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 timezone
var_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 instance
echo 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

Setters 通過(guò)PHP的 __set() 方法實(shí)現(xiàn)。值得注意的是,通過(guò)這種方式設(shè)置時(shí)間戳?xí)r,時(shí)區(qū)不會(huì)相對(duì)于時(shí)間戳而改變。如果需要改變時(shí)區(qū)的話,需要針對(duì)時(shí)區(qū)多帶帶設(shè)置。

$dt = Carbon::now();

$dt->year = 1975;
$dt->month = 13;             // would force year++ and month = 1
$dt->month = 5;
$dt->day = 21;
$dt->hour = 22;
$dt->minute = 32;
$dt->second = 5;

$dt->timestamp = 169957925;  // This will not change the timezone

// Set the timezone via DateTimeZone instance or string
$dt->timezone = new DateTimeZone("Europe/London");
$dt->timezone = "Europe/London";
$dt->tz = "Europe/London";
Fluent Setters

此處 Setters 方法的參數(shù)是必選參數(shù),Carbon 提供了更多種設(shè)置方式可供使用。值得注意的是,所有對(duì)于時(shí)區(qū)的修改都會(huì)影響整個(gè)到 Carbon 實(shí)例。對(duì)時(shí)間戳進(jìn)行修改時(shí)不會(huì)自動(dòng)轉(zhuǎn)換到時(shí)間戳對(duì)應(yīng)的時(shí)區(qū)。

$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->setDateTime(1975, 5, 21, 22, 32, 5)->toDateTimeString();

$dt->timestamp(169957925)->timezone("Europe/London");

$dt->tz("America/Toronto")->setTimezone("America/Vancouver");
IsSet

當(dāng)嘗試調(diào)用 Carbon 實(shí)例的屬性時(shí),會(huì)首先檢查該屬性是否存在,存在返回 true,不存在返回 false。

var_dump(isset(Carbon::now()->iDoNotExist));       // bool(false)
var_dump(isset(Carbon::now()->hour));              // bool(true)
var_dump(empty(Carbon::now()->iDoNotExist));       // bool(true)
var_dump(empty(Carbon::now()->year));              // bool(false)
String Formatting

所有類(lèi)似 toXXXString() 這樣的方法都依賴于DateTime::format()。__toString() 方法允許 Carbon 實(shí)例被打印時(shí)以一種可讀性更好的方式被打印出來(lái)。

$dt = Carbon::create(1975, 12, 25, 14, 15, 16);

var_dump($dt->toDateTimeString() == $dt);          // bool(true) => uses __toString()
echo $dt->toDateString();                          // 1975-12-25
echo $dt->toFormattedDateString();                 // Dec 25, 1975
echo $dt->toTimeString();                          // 14:15:16
echo $dt->toDateTimeString();                      // 1975-12-25 14:15:16
echo $dt->toDayDateTimeString();                   // Thu, Dec 25, 1975 2:15 PM

// ... of course format() is still available
echo $dt->format("l jS of F Y h:i:s A");         // Thursday 25th of December 1975 02:15:16 PM

另外可以默認(rèn)設(shè)置 __toString() 方法所要顯示的時(shí)間日期格式。

Carbon::setToStringFormat("jS of F, Y g:i:s a");
echo $dt;                                          // 25th of December, 1975 2:15:16 pm
Carbon::resetToStringFormat();
echo $dt;                                          // 1975-12-25 14:15:16
如果需要設(shè)定特定的語(yǔ)言顯示,請(qǐng)參考 Localization 部分。
Common Formats

下面是對(duì) DateTime 類(lèi)提供的通用格式的一些封裝。

$dt = Carbon::now();

// $dt->toAtomString() is the same as $dt->format(DateTime::ATOM);
echo $dt->toAtomString();      // 1975-12-25T14:15:16-05:00
echo $dt->toCookieString();    // Thursday, 25-Dec-1975 14:15:16 EST
echo $dt->toIso8601String();   // 1975-12-25T14:15:16-0500
echo $dt->toRfc822String();    // Thu, 25 Dec 75 14:15:16 -0500
echo $dt->toRfc850String();    // Thursday, 25-Dec-75 14:15:16 EST
echo $dt->toRfc1036String();   // Thu, 25 Dec 75 14:15:16 -0500
echo $dt->toRfc1123String();   // Thu, 25 Dec 1975 14:15:16 -0500
echo $dt->toRfc2822String();   // Thu, 25 Dec 1975 14:15:16 -0500
echo $dt->toRfc3339String();   // 1975-12-25T14:15:16-05:00
echo $dt->toRssString();       // Thu, 25 Dec 1975 14:15:16 -0500
echo $dt->toW3cString();       // 1975-12-25T14:15:16-05:00
Comparison

通過(guò)以下方式可以對(duì)兩個(gè) Carbon 實(shí)例進(jìn)行簡(jiǎn)單的比較。牢記這些比較都是在UTC時(shí)區(qū)下完成的。

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)

如果要判斷當(dāng)前實(shí)例對(duì)應(yīng)的時(shí)間,是否在其他兩個(gè)實(shí)例對(duì)應(yīng)的時(shí)間之間,可以用 between() 方法。如果提供了第三個(gè)參數(shù),并且為 true,將會(huì)進(jìn)行 >= 和 <= 的操作。如果為 false,會(huì)進(jìn)行 > 和 < 的操作。該參數(shù)默認(rèn)是 true 。

$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)

還記得之前提到的 min() 和 max() 嗎?min() 將會(huì)返回兩個(gè)實(shí)例中時(shí)間較早的實(shí)例,max() 返回時(shí)間較晚的那個(gè)。如果沒(méi)有提供給 min() 或 max() 任何參數(shù),將會(huì)拿當(dāng)前時(shí)間和調(diào)用該方法的實(shí)例進(jìn)行比較。

$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0);
$dt2 = Carbon::create(2014, 1, 30, 0, 0, 0);
echo $dt1->min($dt2);                              // 2012-01-01 00:00:00

$dt1 = Carbon::create(2012, 1, 1, 0, 0, 0);
$dt2 = Carbon::create(2014, 1, 30, 0, 0, 0);
echo $dt1->max($dt2);                              // 2014-01-30 00:00:00

// now is the default param
$dt1 = Carbon::create(2000, 1, 1, 0, 0, 0);
echo $dt1->max();                                  // 2016-06-24 15:18:34

Carbon 提供了一些見(jiàn)名知意的輔助方法去處理大部分用到的場(chǎng)景。需要執(zhí)行比較操作的方法都會(huì)與當(dāng)前時(shí)區(qū)的當(dāng)前時(shí)間進(jìn)行比較。

$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!
Addition and Subtraction

默認(rèn)的DateTime類(lèi)提供了一對(duì)方便增加和減少時(shí)間的方法。有 modify(),add() 和 sub() 。modify() 方法接受一個(gè)標(biāo)準(zhǔn)的 data/time 字符串,該方法會(huì)對(duì)字符串進(jìn)行解析,當(dāng)牽扯到 add() 和 sub() 時(shí)會(huì)隱式調(diào)用DateInterval類(lèi)進(jìn)行處理。用鏈?zhǔn)秸{(diào)用的方式進(jìn)行操作,代碼將會(huì)更加的清晰和易讀。當(dāng)然,由于繼承關(guān)系這并不會(huì)影響你使用底層的方法進(jìn)行操作。

$dt = Carbon::create(2012, 1, 31, 0);

echo $dt->toDateTimeString();            // 2012-01-31 00:00:00

echo $dt->addYears(5);                   // 2017-01-31 00:00:00
echo $dt->addYear();                     // 2018-01-31 00:00:00
echo $dt->subYear();                     // 2017-01-31 00:00:00
echo $dt->subYears(5);                   // 2012-01-31 00:00:00

echo $dt->addMonths(60);                 // 2017-01-31 00:00:00
echo $dt->addMonth();                    // 2017-03-03 00:00:00 equivalent of $dt->month($dt->month + 1); so it wraps
echo $dt->subMonth();                    // 2017-02-03 00:00:00
echo $dt->subMonths(60);                 // 2012-02-03 00:00:00

echo $dt->addDays(29);                   // 2012-03-03 00:00:00
echo $dt->addDay();                      // 2012-03-04 00:00:00
echo $dt->subDay();                      // 2012-03-03 00:00:00
echo $dt->subDays(29);                   // 2012-02-03 00:00:00

echo $dt->addWeekdays(4);                // 2012-02-09 00:00:00
echo $dt->addWeekday();                  // 2012-02-10 00:00:00
echo $dt->subWeekday();                  // 2012-02-09 00:00:00
echo $dt->subWeekdays(4);                // 2012-02-03 00:00:00

echo $dt->addWeeks(3);                   // 2012-02-24 00:00:00
echo $dt->addWeek();                     // 2012-03-02 00:00:00
echo $dt->subWeek();                     // 2012-02-24 00:00:00
echo $dt->subWeeks(3);                   // 2012-02-03 00:00:00

echo $dt->addHours(24);                  // 2012-02-04 00:00:00
echo $dt->addHour();                     // 2012-02-04 01:00:00
echo $dt->subHour();                     // 2012-02-04 00:00:00
echo $dt->subHours(24);                  // 2012-02-03 00:00:00

echo $dt->addMinutes(61);                // 2012-02-03 01:01:00
echo $dt->addMinute();                   // 2012-02-03 01:02:00
echo $dt->subMinute();                   // 2012-02-03 01:01:00
echo $dt->subMinutes(61);                // 2012-02-03 00:00:00

echo $dt->addSeconds(61);                // 2012-02-03 00:01:01
echo $dt->addSecond();                   // 2012-02-03 00:01:02
echo $dt->subSecond();                   // 2012-02-03 00:01:01
echo $dt->subSeconds(61);                // 2012-02-03 00:00:00

當(dāng)然你也可以傳遞負(fù)值到addXXX()方法,實(shí)際這正是subXXX()方法所實(shí)現(xiàn)的功能。

Difference

以下方法總是返回兩個(gè)實(shí)例之間的時(shí)間差。與基類(lèi)中的 diff() 方法不同的是,diff() 方法會(huì)通過(guò)DateInterval實(shí)例將61秒轉(zhuǎn)化成1分1秒來(lái)返回。下邊的這些方法第一個(gè)參數(shù)是將會(huì)用來(lái)比較的 Carbon 實(shí)例,默認(rèn)為 now() 方法創(chuàng)建的當(dāng)前時(shí)間實(shí)例。第二個(gè)參數(shù)也是可選的,指明了你是否需要返回一個(gè)比較結(jié)果的絕對(duì)值,默認(rèn)為 true,當(dāng)?shù)诙€(gè)參數(shù)為 false,并且用于比較的實(shí)例時(shí)間早于被比較的實(shí)例時(shí),返回負(fù)數(shù)。所有的比較操作都在UTC時(shí)區(qū)下完成。

// Carbon::diffInYears(Carbon $dt = null, $abs = true)

echo Carbon::now("America/Vancouver")->diffInSeconds(Carbon::now("Europe/London")); // 0

$dtOttawa = Carbon::createFromDate(2000, 1, 1, "America/Toronto");
$dtVancouver = Carbon::createFromDate(2000, 1, 1, "America/Vancouver");
echo $dtOttawa->diffInHours($dtVancouver);                             // 3

echo $dtOttawa->diffInHours($dtVancouver, false);                      // 3
echo $dtVancouver->diffInHours($dtOttawa, false);                      // -3

$dt = Carbon::create(2012, 1, 31, 0);
echo $dt->diffInDays($dt->copy()->addMonth());                         // 31
echo $dt->diffInDays($dt->copy()->subMonth(), false);                  // -31

$dt = Carbon::create(2012, 4, 30, 0);
echo $dt->diffInDays($dt->copy()->addMonth());                         // 30
echo $dt->diffInDays($dt->copy()->addWeek());                          // 7

$dt = Carbon::create(2012, 1, 1, 0);
echo $dt->diffInMinutes($dt->copy()->addSeconds(59));                  // 0
echo $dt->diffInMinutes($dt->copy()->addSeconds(60));                  // 1
echo $dt->diffInMinutes($dt->copy()->addSeconds(119));                 // 1
echo $dt->diffInMinutes($dt->copy()->addSeconds(120));                 // 2

echo $dt->addSeconds(120)->secondsSinceMidnight();                     // 120

一些特殊的過(guò)濾方法,像 diffInDaysFiltered() 、diffInHoursFiltered() 和 diffFiltered() ,可以幫助你過(guò)濾時(shí)間差中的 days 、hour 或者一個(gè)自定義的時(shí)間間隔。下邊是統(tǒng)計(jì)兩個(gè)實(shí)例之間的周末天數(shù)。

$dt = Carbon::create(2014, 1, 1);
$dt2 = Carbon::create(2014, 12, 31);
$daysForExtraCoding = $dt->diffInDaysFiltered(function(Carbon $date) {
   return $date->isWeekend();
}, $dt2);

echo $daysForExtraCoding;      // 104

$dt = Carbon::create(2014, 1, 1)->startOfDay();
$dt2 = $dt->copy()->endOfDay();
$littleHandRotations = $dt->diffFiltered(CarbonInterval::minute(), function(Carbon $date) {
   return $date->minute === 0;
}, $dt2);

echo $littleHandRotations;     // 24

// others that are defined
// diffInYears(), diffInMonths(), diffInWeeks()
// diffInDays(), diffInWeekdays(), diffInWeekendDays()
// diffInHours(), diffInMinutes(), diffInSeconds()
// secondsSinceMidnight(), secondsUntilEndOfDay()
Difference for Humans

對(duì)于人們來(lái)說(shuō),一月前比30天前更加易與理解。這是一個(gè)常見(jiàn)的方法在許多日期處理類(lèi)庫(kù)中,所以他想也應(yīng)該把這個(gè)加進(jìn)來(lái)。這里把一個(gè)月看做四周,這些方法需要一個(gè)可選的 Carbon 實(shí)例作為參數(shù)來(lái)進(jìn)行比較,默認(rèn)為當(dāng)前時(shí)間的實(shí)例。
這些方法會(huì)在兩個(gè)時(shí)間差值后增加一寫(xiě)描述,可能類(lèi)似下邊這四種:

When comparing a value in the past to default now:

1 hour ago

5 months ago

When comparing a value in the future to default now:

1 hour from now

5 months from now

When comparing a value in the past to another value:

1 hour before

5 months before

When comparing a value in the future to another value:

1 hour after

5 months after

你也可以傳遞第二個(gè)參數(shù)去掉類(lèi)似 ago,from now 這種修飾符,類(lèi)似這樣的用法 diffForHumans(Carbon $other, true) 等。

// The most typical usage is for comments
// The instance is the date the comment was created and its being compared to default now()
echo Carbon::now()->subDays(5)->diffForHumans();               // 5 days ago

echo Carbon::now()->diffForHumans(Carbon::now()->subYear());   // 1 year after

$dt = Carbon::createFromDate(2011, 8, 1);

echo $dt->diffForHumans($dt->copy()->addMonth());              // 1 month before
echo $dt->diffForHumans($dt->copy()->subMonth());              // 1 month after

echo Carbon::now()->addSeconds(5)->diffForHumans();            // 5 seconds from now

echo Carbon::now()->subDays(24)->diffForHumans();              // 3 weeks ago
echo Carbon::now()->subDays(24)->diffForHumans(null, true);    // 3 weeks

你也通過(guò)在 diffForHumans() 被調(diào)用前,使用 Carbon::setLocale(‘fr’) 來(lái)改變語(yǔ)言設(shè)置。詳細(xì)請(qǐng)參考 localization 部分。

Modifiers

Carbon argument.這些方法組對(duì)修改當(dāng)前實(shí)例很有幫助。你會(huì)注意到 startOfXXX(),next(),和 previous() 方法將會(huì)設(shè)置時(shí)間為 00:00:00,另外 endOfXXX() 方法將會(huì)設(shè)置時(shí)間為 23:59:59 。

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfDay();                            // 2012-01-31 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfDay();                              // 2012-01-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfMonth();                          // 2012-01-01 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfMonth();                            // 2012-01-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfYear();                           // 2012-01-01 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfYear();                             // 2012-12-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfDecade();                         // 2010-01-01 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfDecade();                           // 2019-12-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfCentury();                        // 2000-01-01 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfCentury();                          // 2099-12-31 23:59:59

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->startOfWeek();                           // 2012-01-30 00:00:00
var_dump($dt->dayOfWeek == Carbon::MONDAY);        // bool(true) : ISO8601 week starts on Monday

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->endOfWeek();                             // 2012-02-05 23:59:59
var_dump($dt->dayOfWeek == Carbon::SUNDAY);        // bool(true) : ISO8601 week ends on Sunday

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->next(Carbon::WEDNESDAY);                 // 2012-02-01 00:00:00
var_dump($dt->dayOfWeek == Carbon::WEDNESDAY);     // bool(true)

$dt = Carbon::create(2012, 1, 1, 12, 0, 0);
echo $dt->next();                                  // 2012-01-08 00:00:00

$dt = Carbon::create(2012, 1, 31, 12, 0, 0);
echo $dt->previous(Carbon::WEDNESDAY);             // 2012-01-25 00:00:00
var_dump($dt->dayOfWeek == Carbon::WEDNESDAY);     // bool(true)

$dt = Carbon::create(2012, 1, 1, 12, 0, 0);
echo $dt->previous();                              // 2011-12-25 00:00:00

$start = Carbon::create(2014, 1, 1, 0, 0, 0);
$end = Carbon::create(2014, 1, 30, 0, 0, 0);
echo $start->average($end);                        // 2014-01-15 12:00:00

// others that are defined that are similar
//   firstOfMonth(), lastOfMonth(), nthOfMonth()
//   firstOfQuarter(), lastOfQuarter(), nthOfQuarter()
//   firstOfYear(), lastOfYear(), nthOfYear()
Constants

Carbon 中定義了以下常量。

// These getters specifically return integers, ie intval()
var_dump(Carbon::SUNDAY);                          // int(0)
var_dump(Carbon::MONDAY);                          // int(1)
var_dump(Carbon::TUESDAY);                         // int(2)
var_dump(Carbon::WEDNESDAY);                       // int(3)
var_dump(Carbon::THURSDAY);                        // int(4)
var_dump(Carbon::FRIDAY);                          // int(5)
var_dump(Carbon::SATURDAY);                        // int(6)

var_dump(Carbon::YEARS_PER_CENTURY);               // int(100)
var_dump(Carbon::YEARS_PER_DECADE);                // int(10)
var_dump(Carbon::MONTHS_PER_YEAR);                 // int(12)
var_dump(Carbon::WEEKS_PER_YEAR);                  // int(52)
var_dump(Carbon::DAYS_PER_WEEK);                   // int(7)
var_dump(Carbon::HOURS_PER_DAY);                   // int(24)
var_dump(Carbon::MINUTES_PER_HOUR);                // int(60)
var_dump(Carbon::SECONDS_PER_MINUTE);              // int(60)
$dt = Carbon::createFromDate(2012, 10, 6);
if ($dt->dayOfWeek === Carbon::SATURDAY) {
    echo "Place bets on Ottawa Senators Winning!";
}
CarbonInterval

Carbon 類(lèi)繼承了PHP 的DateInterval類(lèi)。


你也可以通過(guò)一下方法創(chuàng)建一個(gè)實(shí)例。

echo CarbonInterval::year();                           // 1 year
echo CarbonInterval::months(3);                        // 3 months
echo CarbonInterval::days(3)->seconds(32);             // 3 days 32 seconds
echo CarbonInterval::weeks(3);                         // 3 weeks
echo CarbonInterval::days(23);                         // 3 weeks 2 days
echo CarbonInterval::create(2, 0, 5, 1, 1, 2, 7);      // 2 years 5 weeks 1 day 1 hour 2 minutes 7 seconds

如果你繼承的 DateInterval 實(shí)例來(lái)自其他類(lèi)庫(kù),別怕,通過(guò) instance() 這種友好的方式你手動(dòng)可以創(chuàng)建一個(gè) CarbonInterval 實(shí)例。

$di = new DateInterval("P1Y2M"); // <== instance from another API
$ci = CarbonInterval::instance($di);
echo get_class($ci);                                   // "CarbonCarbonInterval"
echo $ci;                                              // 1 year 2 months

其他的一些輔助方法,但要注意這些輔助方法處理周時(shí),只有天會(huì)被保存下來(lái)。并且是在當(dāng)前實(shí)例的總天數(shù)基礎(chǔ)上計(jì)算周。

echo CarbonInterval::year()->years;                    // 1
echo CarbonInterval::year()->dayz;                     // 0
echo CarbonInterval::days(24)->dayz;                   // 24
echo CarbonInterval::days(24)->daysExcludeWeeks;       // 3
echo CarbonInterval::weeks(3)->days(14)->weeks;        // 2  <-- days setter overwrites the current value
echo CarbonInterval::weeks(3)->weeks;                  // 3
echo CarbonInterval::minutes(3)->weeksAndDays(2, 5);   // 2 weeks 5 days 3 minutes

也有一個(gè)方便的 forHumans(),在調(diào)用 __toString() 方法時(shí),自動(dòng)執(zhí)行,并打印出可讀性更好的時(shí)間格式。

CarbonInterval::setLocale("fr");
echo CarbonInterval::create(2, 1)->forHumans();        // 2 ans 1 mois
echo CarbonInterval::hour()->seconds(3);               // 1 heure 3 secondes
CarbonInterval::setLocale("en");

當(dāng)然,你可以通過(guò) CarbonInterval::setLocale(‘fr’) 來(lái)改變語(yǔ)言顯示。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/26304.html

相關(guān)文章

  • [轉(zhuǎn)+] Carbon中文文檔

    摘要:原文地址中文文檔介紹是的日期處理類(lèi)庫(kù)。例如作者所在的時(shí)區(qū)為東京時(shí)間減小時(shí),因此在下午一點(diǎn)后。最后提到的這兩個(gè)方法都是處理時(shí)間戳的。以下是當(dāng)前支持的時(shí)間轉(zhuǎn)換字值得注意的是像和方法等相關(guān)的修改會(huì)把日期的時(shí)間部分設(shè)置成。 原文地址 : Carbon中文文檔 介紹 Carbon 是php的日期處理類(lèi)庫(kù)(A simple PHP API extension for DateTime.)。 Car...

    cyqian 評(píng)論0 收藏0
  • Laravel 5.8 正式發(fā)布(文檔翻譯已啟動(dòng))

    摘要:現(xiàn)在面向所有人正式發(fā)布了。并且有計(jì)劃將作為可選擴(kuò)展包發(fā)布,你仍然可以在項(xiàng)目中使用它們。是最新的穩(wěn)定版本,將在年月左右處理收到的錯(cuò)誤修復(fù)和更新,并在年月左右之前進(jìn)行安全修復(fù)。中文翻譯中文翻譯已啟動(dòng),請(qǐng)關(guān)注更多翻譯文章請(qǐng)見(jiàn)開(kāi)發(fā)者社區(qū) showImg(https://segmentfault.com/img/remote/1460000018318895?w=1680&h=859); Lar...

    hankkin 評(píng)論0 收藏0
  • 使用 Carbon 計(jì)算時(shí)間差

    摘要:它是專(zhuān)門(mén)用來(lái)處理和時(shí)間相關(guān)的類(lèi),除了這里用到的實(shí)例化時(shí)間計(jì)算時(shí)間等,還有很多實(shí)用的功能,在參考資料中有相關(guān)鏈接,可以查看。 導(dǎo)語(yǔ) 這個(gè)需求是這樣的,我的電飯鍋有定時(shí)功能,第二天早上想要喝粥的話,就要設(shè)置倒計(jì)時(shí),每次就要算一下要設(shè)置多少時(shí)間,干脆就寫(xiě)個(gè)代碼好了。很簡(jiǎn)單的功能,不值得寫(xiě)一篇,另一個(gè)目的其實(shí)是記錄一下從開(kāi)發(fā)到提交 GitHub 的流程。代碼可查看 GitHub。 本地開(kāi)發(fā) 先...

    LinkedME2016 評(píng)論0 收藏0
  • Laravel 5.4 入門(mén)系列 10.文章歸檔

    摘要:將上述的一系列查詢進(jìn)行封裝模型到了這一步,我們基本上實(shí)現(xiàn)了文章歸檔的功能。但是有一個(gè)問(wèn)題,文章歸檔實(shí)際上包括在通用視圖中,這就意味著,網(wǎng)站的所有請(qǐng)求都需要返回,否則就會(huì)報(bào)錯(cuò)。數(shù)據(jù)庫(kù)之?dāng)?shù)據(jù)庫(kù)請(qǐng)求構(gòu)建器中文文檔的視圖功能中文文檔 首先,要實(shí)現(xiàn)的是按照日期來(lái)統(tǒng)計(jì)文章,原始的 SQL 如下: select year(created_at) year, monthname(c...

    Nekron 評(píng)論0 收藏0
  • PHP新手開(kāi)發(fā)者的路線建議

    摘要:年開(kāi)發(fā)者應(yīng)該熟練使用,并且知道版本更新內(nèi)容。對(duì)開(kāi)發(fā)和運(yùn)維人員來(lái)說(shuō),最希望的就是一次性創(chuàng)建或配置,可以在任意地方正常運(yùn)行。是標(biāo)準(zhǔn)規(guī)范,是開(kāi)發(fā)的實(shí)踐標(biāo)準(zhǔn)。對(duì)開(kāi)發(fā)者來(lái)說(shuō)語(yǔ)言推薦和,全棧的選擇非常多,推薦熱門(mén)的 前言 在前天(2018-08-02)已經(jīng)發(fā)布了PHP 7.3.0.beta1 Released 如果你還沒(méi)有使用 PHP7 ,那真的很遺憾。2018年P(guān)HP開(kāi)發(fā)者應(yīng)該熟練使用 PHP7...

    klinson 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<