在编写PHP应用时经常需要处理日期和时间,这篇文章带你了解一下Carbon继承自PHPDateTime类的API扩展,它使得处理日期和时间更加简单。Laravel中默认使用的时间处理类就是Carbon。?phpnamespaceCclassCarbonextendsDateTime{codehere} 你可以在Carbon命名空间的Carbon类中看到上面声明的代码片段。 获取当前时间 可以同now()方法获取当前的日期和时间。如果你不指定参数,它会使用PHP配置中的时区:?phpechoCarbon::now();2016101420:21:20? 如果你想使用一个不同的时区,你需要传递一个有效的时区作为参数:直接使用字符串echoCarbon::now(EuropeLondon);2016101420:21:20或者echoCarbon::now(newDateTimeZone(EuropeLondon)); 除now()外,还提供了today()、tomorrow()、yesterday()等静态函数,不过,它们的时间都是00:00:00:echoCarbon::now();2016101415:18:34echoCarbon::today();2016101400:00:00echoCarbon::tomorrow(EuropeLondon);2016101400:00:00echoCarbon::yesterday();2016101400:00:00 以上输出结果其实是一个Carbon类型的日期时间对象:Carbon{179date:2016061400:00:00。000000timezonetype:3timezone:UTC} 要想获取字符串类型的日期,可以使用下面的代码:echoCarbon::today()toDateTimeString();echoCarbon::yesterday()toDateTimeString();echoCarbon::tomorrow()toDateTimeString(); 日期类型转为字符串 如上所述,默认情况下,Carbon的方法返回的为一个日期时间对象。虽然它是一个对象,但是你却可以直接使用echo输出结果,因为有toString魔术方法。但是如果你想把它转为字符串,可以使用toDateString或toDateTimeString方法:echoCarbon::now()toDateString();20161014echoCarbon::now()toDateTimeString();2016101420:22:50 日期解析 你还可以使用parse方法解析任何顺序和类型的日期(结果为Carbon类型的日期时间对象):echoCarbon::parse(20161015)toDateTimeString();2016101500:00:00echoCarbon::parse(20161015)toDateTimeString();2016101500:00:00echoCarbon::parse(2016101500:10:25)toDateTimeString();2016101500:10:25echoCarbon::parse(today)toDateTimeString();2016101500:00:00echoCarbon::parse(yesterday)toDateTimeString();2016101400:00:00echoCarbon::parse(tomorrow)toDateTimeString();2016101600:00:00echoCarbon::parse(2daysago)toDateTimeString();2016101320:49:53echoCarbon::parse(3days)toDateTimeString();2016101820:49:53echoCarbon::parse(2weeks)toDateTimeString();2016102920:49:53echoCarbon::parse(4months)toDateTimeString();2017021520:49:53echoCarbon::parse(1year)toDateTimeString();2015101520:49:53echoCarbon::parse(nextwednesday)toDateTimeString();2016101900:00:00echoCarbon::parse(lastfriday)toDateTimeString();2016101400:00:00 构造日期 你还可以使用单独的年月日来构造日期:year2015;month04;day12;echoCarbon::createFromDate(year,month,day);2015041220:55:59hour02;minute15:second30;echoCarbon::create(year,month,day,hour,minute,second);2015041202:15:30echoCarbon::createFromDate(null,12,25);年默认为当前年份 此外,还可以传递一个有效的时区作为最后一个参数。 日期操作 日期操作可以通过add(增加)或sub(减去)跟上要增加或减去的单位来完成。例如,你想给一个日期增加指定的天数,你可以使用addDays方法。此外还提供了一个modify方法,参数格式为或跟上值及单位。所以,如果你想给当前日期增加一年,你可以传递1year:echoCarbon::now()addDays(25);2016110914:00:01echoCarbon::now()addWeeks(3);2016110514:00:01echoCarbon::now()addHours(25);2016101615:00:01echoCarbon::now()subHours(2);2016101512:00:01echoCarbon::now()addHours(2)addMinutes(12);2016101516:12:01echoCarbon::now()modify(15days);2016103014:00:01echoCarbon::now()modify(2days);2016101314:00:01 日期比较 在Carbon中你可以使用下面的方法来比较日期:min返回最小日期。max返回最大日期。eq判断两个日期是否相等。gt判断第一个日期是否比第二个日期大。lt判断第一个日期是否比第二个日期小。gte判断第一个日期是否大于等于第二个日期。lte判断第一个日期是否小于等于第二个日期。echoCarbon::now()tzNAmericaTorontofirstCarbon::create(2012,9,5,23,26,11);secondCarbon::create(2012,9,5,20,26,11,AmericaVancouver);echofirsttoDateTimeString();2012090523:26:11echofirsttzNAmericaTorontoechosecondtoDateTimeString();2012090520:26:11echosecondtzNAmericaVancouvervardump(firsteq(second));bool(true)vardump(firstne(second));bool(false)vardump(firstgt(second));bool(false)vardump(firstgte(second));bool(true)vardump(firstlt(second));bool(false)vardump(firstlte(second));bool(true)firstsetDateTime(2012,1,1,0,0,0);secondsetDateTime(2012,1,1,0,0,0);RemembertzisAmericaVancouvervardump(firsteq(second));bool(false)vardump(firstne(second));bool(true)vardump(firstgt(second));bool(false)vardump(firstgte(second));bool(false)vardump(firstlt(second));bool(true)vardump(firstlte(second));bool(true) 要判断一个日期是否介于两个日期之间,可以使用between()方法,第三个可选参数指定比较是否可以相等,默认为true:firstCarbon::create(2012,9,5,1);secondCarbon::create(2012,9,5,5);vardump(Carbon::create(2012,9,5,3)between(first,second));bool(true)vardump(Carbon::create(2012,9,5,5)between(first,second));bool(true)vardump(Carbon::create(2012,9,5,5)between(first,second,false));bool(false) 此外还提供了一些辅助方法,你可以从它们的名字中明白其含义:dtCarbon::now();dtisWeekday();dtisWeekend();dtisYesterday();dtisToday();dtisTomorrow();dtisFuture();dtisPast();dtisLeapYear();dtisSameDay(Carbon::now());bornCarbon::createFromDate(1987,4,23);noCakeCarbon::createFromDate(2014,9,26);yesCakeCarbon::createFromDate(2014,4,23);overTheHillCarbon::now()subYears(50);vardump(bornisBirthday(noCake));bool(false)vardump(bornisBirthday(yesCake));bool(true)vardump(overTheHillisBirthday());bool(true)defaultcompareittotoday! diffForHumans 一个月前比30天前更便于阅读,很多日期库都提供了这个常见的功能,日期被解析后,有下面四种可能性: 当比较的时间超过当前默认时间 1天前 5月前 当用将来的时间与当前默认时间比较 1小时距现在 5月距现在 当比较的值超过另一个值 1小时前 5月前 当比较的值在另一个值之后 1小时后 5月后 你可以把第二个参数设置为true来删除前、距现在等修饰语:diffForHumans(Carbonother,true)。echoCarbon::now()subDays(5)diffForHumans();5天前echoCarbon::now()diffForHumans(Carbon::now()subYear());1年后dtCarbon::createFromDate(2011,8,1);echodtdiffForHumans(dtcopy()addMonth());1月前echodtdiffForHumans(dtcopy()subMonth());11月后echoCarbon::now()addSeconds(5)diffForHumans();5秒距现在echoCarbon::now()subDays(24)diffForHumans();3周前echoCarbon::now()subDays(24)diffForHumans(null,true);3周 作者:童蒙vlog 链接:https:www。jianshu。comp9d2b576acded 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。