gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

詳細介紹PHP中時間處理類Carbon的用法

本篇文章主要給大家介紹了關于PHP的相關知識,Carbon 是php的日期處理類庫(A simple PHP API extension for DateTime.),繼承了PHP的 Datetime 類,下面講解一下該類的使用,希望對大家有幫助。

詳細介紹PHP中時間處理類Carbon的用法

(推薦教程:PHP視頻教程)

1.Introduction

Carbon 是php的日期處理類庫(A simple PHP API extension for DateTime.)。

Carbon 繼承了PHP的 Datetime 類,所以 Carbon 中沒有涉及到的,但在 Datetime 中已經實現的方法都是可以使用的。

看代碼

<?php namespace Carbon;   class Carbon extends DateTime {     // code here }

Carbon 類聲明在 Carbon 命名空間下,可以通過引入命名空間的方式來代替每次輸入完整的類名。

<?php use CarbonCarbon;

Note:如果在使用 Carbon 時,沒有專門設置時區的話,默認使用 America/Toronto 的時區。

要特別留意是否使用了正確的時區,比如 Carbon 的所有差異比較都使用 UTC 或者系統設定的時區。

<?php $dtToronto = Carbon::createFromDate(2012, 1, 1, 'America/Toronto'); $dtVancouver = Carbon::createFromDate(2012, 1, 1, 'America/Vancouver');   echo $dtVancouver->diffInHours($dtToronto); // 3

以上進行的時間比較是在提供的 Carbon 實例所在的時區下完成的。例如作者所在的時區為 東京時間減13 小時,因此在下午一點后。Carbon::now(‘Asia/Tokyo’)->isToday() 將會返回 false ,如果在調用 now() 時設置時區為東京時區,接下來的操作都使用東京時區是說不過去的。所以在與 now() 創建的實例進行比較時,默認是在當前時區下完成的。

2.Instantiation

有好幾種方式可以創建 Carbon 的實例,但是大家應該更傾向于通過這種語義化的靜態方法來實現。

<?php $carbon = new Carbon();                  // equivalent to Carbon::now() $carbon = new Carbon('first day of January 2008', 'America/Vancouver'); echo get_class($carbon);                 // 'CarbonCarbon' $carbon = Carbon::now(-5);

值得注意的是,Carbon 構造器的第二個參數被增強到了不僅限于DateTimeZone 實例,還可以是 String、Integer (表示相對于GMT的偏移值)。舉個例子來說明下 now() 方法。

<?php $now = Carbon::now();   $nowInLondonTz = Carbon::now(new DateTimeZone('Europe/London'));   // or just pass the timezone as a string $nowInLondonTz = Carbon::now('Europe/London');   // or to create a date with a timezone of +1 to GMT during DST then just pass an integer echo Carbon::now(1)->tzName;             // Europe/London

你將會喜歡上用 parse() 方法來代替原有繁瑣的構造方式

<?php 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

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

<?php $now = Carbon::now(); echo $now;                               // 2016-06-24 15:18:34 $today = Carbon::today(); echo $today;                             // 2016-06-24 00:00:00 $tomorrow = Carbon::tomorrow('Europe/London'); echo $tomorrow;                          // 2016-06-25 00:00:00 $yesterday = Carbon::yesterday(); echo $yesterday;                         // 2016-06-23 00:00:00

下面是一些其他的 creatXXX() 形式的靜態方法。絕大多數靜態方法的參數是可傳可不傳的,如果不傳的話會使用方法預設的默認值,這些預設值一般都是針對當前日期、時間、時區的。如果為傳遞某個必要參數,會拋出一個 InvalidArgumentException 類型的異常,用 DateTime::getLastErrors() 方法可以得到異常的詳細信息。

<?php Carbon::createFromDate($year, $month, $day, $tz); Carbon::createFromTime($hour, $minute, $second, $tz); Carbon::create($year, $month, $day, $hour, $minute, $second, $tz);

createFromDate() 默認返回當前時間,createFromTime()日期默認是今天。crete() 所有為 null 的參數都將默認為當前對應的時間。同樣,時區也默認是當前時區。如果只設置了小時數沒有設置分秒那么分秒默認是 0

<?php $xmasThisYear = Carbon::createFromDate(null, 12, 25);  // Year defaults to current year $Y2K = Carbon::create(2000, 1, 1, 0, 0, 0); $alsoY2K = Carbon::create(1999, 12, 31, 24); $noonLondonTz = Carbon::createFromTime(12, 0, 0, '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();  }
<?php Carbon::createFromFormat($format, $time, $tz);

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

<?php echo Carbon::createFromFormat('Y-m-d H', '1975-05-21 22')->toDateTimeString(); // 1975-05-21 22:00:00

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

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

copy() 方法可以copy一個已經存在的 Carbon 實例。對copy生成實例進行修改并不會影響被copy對象的本身。

<?php $dt = Carbon::now(); echo $dt->diffInYears($dt->copy()->addYear());  // 1   // $dt was unchanged and still holds the value of Carbon:now()

最后,當你正在使用的 DateTime 實例是通過實例化其他繼承了 DateTime 庫而得到的,別怕!通過下邊的方式仍然可以極其友好創建 Carbon 實例。

<?php $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

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

<?php $dt = Carbon::parse('1975-05-21 22:23:00.123456'); echo $dt->micro;                                       // 123456 echo $dt->copy()->micro;                               // 123456

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

<?php echo Carbon::maxValue();                               // '2038-01-18 22:14:07' echo Carbon::minValue();                               // '1901-12-13 15:45:52'

3.Localization

Carbon中,formatLocalized() 方法通過調用 strftime() 方法,彌補了php底層的 DateTime 類不支持區域化設置的缺陷。如果你已經通過使用setlocale() 方法設置過當前區域,formatLocalized($format) 方法將會按照設置的區域格式進行返回。

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

diffForHumans() 的結果也會被轉化成區域語言。通過Carbon::setLocale() 方法可以設置 Carbon 的區域語言。

<?php Carbon::setLocale('de'); echo Carbon::now()->addYear()->diffForHumans();    // in 1 Jahr   Carbon::setLocale('en');

注意:如果在linux系統中轉換出現了問題,請仔細檢查安裝在本地或生產系統中語言環境

locale -a 列舉出所有可用的語言環境

sudo locale-gen zh_CN.utf8 安裝新的語言環境

sudo dpkg-reconfigure locales 配置啟用新的語言環境,并重啟

4.Testing Aids()

通過測試方法可以得到一個模擬或真實的 Carbon 實例。只有在以下情況下,主動提供的 Carbon 實例才會被特殊處理:

  • 調用靜態方法 now(),例如:Carbon::now()
  • 傳給 construct 或 parse() 方法的是 null (或空字符串),例如:new Carbon(null)
  • 當傳給 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();

一些相關的用法也可以得到一個模擬的 now 實例,返回相應的模擬數據。

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

以下是當前支持的時間轉換字

  • this
  • last
  • next
  • tomorrow
  • yesterday
  • +
  • first
  • ago

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

5.Getters

獲取器通過PHP的 __get() 方式實現??梢灾苯油ㄟ^一下方式直接獲取到屬性的值。

$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

6.Setters

Setters 通過PHP的 __set() 方法實現。值得注意的是,通過這種方式設置時間戳時,時區不會相對于時間戳而改變。如果需要改變時區的話,需要針對時區單獨設置。

$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';

7.Fluent Setters

此處 Setters 方法的參數是必選參數,Carbon 提供了

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
亚洲综合123| 日日噜噜夜夜狠狠| 日本精品免费视频| 污网站在线免费| 亚洲精品免费一区亚洲精品免费精品一区| 欧美精品一区免费| 久久精品国产sm调教网站演员| 视色,视色影院,视色影库,视色网| 一个色综合久久| 九九热99视频| 超碰91在线播放| 国产亚洲精品久久久久久久| 精品一区二区三区毛片| 国产精品三级一区二区| www.日本在线播放| 国产精品97在线| 国产成人黄色网址| 小说区视频区图片区| 国产精品免费看久久久无码| 国产日韩av网站| 国产亚洲欧美在线视频| 日本新janpanese乱熟| 欧美丝袜在线观看| 国产亚洲精品久久久久久久| 北条麻妃在线视频观看| 国产成人美女视频| 欧美黄色免费网址| 黄色av免费在线播放| 久久久久久久久久一区| 亚洲色成人www永久在线观看| 国产亚洲天堂网| 亚洲一区精品视频在线观看| 国产片侵犯亲女视频播放| 日韩欧美国产免费| 欧美日韩在线免费观看视频| 看av免费毛片手机播放| 亚洲欧美偷拍另类| 国产中文字幕二区| 中文字幕黄色大片| 午夜视频在线瓜伦| 男人插女人视频在线观看| 亚洲这里只有精品| 欧美深夜福利视频| 少妇高潮大叫好爽喷水| 久久精品影视大全| 免费看一级大黄情大片| 久久久成人精品一区二区三区| 女性女同性aⅴ免费观女性恋| 免费不卡av网站| 色婷婷综合久久久久中文字幕| 香港三级日本三级a视频| 色乱码一区二区三区在线| 91精品国产91久久久久麻豆 主演| 在线观看中文av| 亚洲天堂2018av| 欧美婷婷精品激情| 无码内射中文字幕岛国片| 国产不卡一区二区视频| 国产aaa免费视频| www.亚洲成人网| 精品一区二区三区毛片| 国产精品999.| www.久久久久久久久久久| 99热一区二区| 三上悠亚在线一区| 国产野外作爱视频播放| 黄色免费网址大全| 无遮挡又爽又刺激的视频| 99精品在线免费视频| 欧美日韩一道本| 日日摸日日碰夜夜爽av| 激情伊人五月天| 欧美二区在线视频| 成人小视频在线看| 老司机午夜av| 天堂av.com| 成年丰满熟妇午夜免费视频| 欧美日韩视频免费| 久草视频国产在线| 国产精品亚洲αv天堂无码| 日本999视频| 91亚洲一区二区| 国产二区视频在线| 亚洲爆乳无码专区| 在线视频日韩欧美| 国产一区二区四区| 少妇性饥渴无码a区免费| av亚洲天堂网| 女人色极品影院| av在线无限看| 无码毛片aaa在线| 国产视频在线视频| 免费观看黄色的网站| 免费看又黄又无码的网站| 国产精品自拍视频在线| 欧美在线观看视频免费| 欧美日韩在线不卡视频| 日本一本在线视频| 国产性xxxx18免费观看视频| 在线免费看v片| 91视频最新入口| 91免费网站视频| 久久久久久久久久福利| youjizz.com亚洲| 东京热加勒比无码少妇| 韩国黄色一级大片| 国产精品自拍视频在线| 国产在线播放观看| 亚洲免费视频播放| 天堂av在线网站| 久久成人免费观看| 毛片在线视频观看| 中文字幕剧情在线观看| 日韩免费高清在线| 国产精品网站免费| 国产精品69久久久| 日韩视频一二三| 日本黄色的视频| 午夜国产一区二区三区| 久久久一本二本三本| 嫩草影院中文字幕| 好吊色视频988gao在线观看| 中文字幕亚洲影院| 一级片视频免费观看| 亚洲国产精品毛片av不卡在线| 亚洲人精品午夜射精日韩| 亚洲色图都市激情| 无码人妻aⅴ一区二区三区日本| 日本高清久久久| 欧美激情第3页| 超碰成人在线播放| 天堂在线中文在线| 国产在线观看中文字幕| 亚洲日本黄色片| 青娱乐国产精品视频| 天天操天天干天天做| 在线一区二区不卡| 久久出品必属精品| 女女同性女同一区二区三区按摩| 欧美一级免费在线观看| 欧美少妇一区二区三区| www成人免费| 国产精品50p| 第四色婷婷基地| 中文字幕日韩久久| 国产a级黄色大片| 日韩精品一区二区三区久久| 日本男人操女人| 亚洲成人手机在线观看| 97在线免费视频观看| 欧美日韩在线视频一区二区三区| 熟女性饥渴一区二区三区| 亚洲熟妇av一区二区三区| 欧美一级xxxx| 91午夜在线观看| 大香煮伊手机一区| 婷婷激情综合五月天| 日韩精品一区二区在线视频| 日韩免费一级视频| 国产福利精品一区二区三区| 国内少妇毛片视频| 国产又粗又长又大的视频| 伊人久久在线观看| 亚洲最大综合网| 国产一区二区三区乱码| 亚洲成人天堂网| 久久久久久久久久网| 99re精彩视频| 奇米精品一区二区三区| 亚洲涩涩在线观看| 黄www在线观看| 91嫩草国产丨精品入口麻豆| 黄在线观看网站| 91成人综合网| 亚洲AV无码成人精品一区| 韩国一区二区av| 伊人再见免费在线观看高清版| 9久久婷婷国产综合精品性色| 成人一级生活片| 青春草在线视频免费观看| 可以免费观看av毛片| 日韩精品在线观看av| 99视频在线观看视频| 超碰在线97免费| 欧在线一二三四区| a在线视频观看| 美女黄色免费看| 久久av高潮av| 美国av在线播放| 国产成年人在线观看| 久久黄色片网站| jizz18女人| 色天使在线观看| 中文字幕 91| 色婷婷.com| 亚洲国产高清av| 涩涩网站在线看| 97超碰人人看| 国产精品一二三在线观看| 日本在线视频www色|