我们在开拓中,常常须要处理韶光的格式化显示。比如打算两个韶光差多永劫光,来日诰日的韶光,本周的韶光,以及人性化的输出“几天前”韶光变革,这时候我们可能会惊悸失措的去网上复制代码,末了搞得代码乱糟糟的。
但实际上,这些用这一个库都能实现:
composer require nesbot/carbon
精简却全面的案例
<?php$date = Carbon::now()->locale('zh_CN');echo "\n";echo $date->locale();echo "\n";echo $date->diffForHumans('2023-08-13');echo "\n";echo $date->monthName;echo "\n";echo $date->isoFormat('LLLL');
输出如下:

2023年4月28日星期五早上8点03分zh_CN3个月前四月2023年4月28日星期五早上8点03分
在上面的例子中,险些没有任何逻辑代码,只是通过静态方法创建了一个工具,然后调用输出就可以。
在上面,我们创建了当前韶光,按照本地化输出韶光,同时比拟一下相较于给定的韶光还差多久,输出一下月份。
多种设置韶光的办法carbon支持各种办法去设置详细的韶光,有时候我们吸收到的日期并不完全,此时可以用它做一个统一的处理,免得在不同数据库之间的默认行为产生兼容性问题。
$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();// All allow microsecond as optional argument$dt->year(1975)->month(5)->day(21)->hour(22)->minute(32)->second(5)->microsecond(123456)->toDateTimeString();$dt->setDate(1975, 5, 21)->setTime(22, 32, 5, 123456)->toDateTimeString();$dt->setDate(1975, 5, 21)->setTimeFromTimeString('22:32:05.123456')->toDateTimeString();$dt->setDateTime(1975, 5, 21, 22, 32, 5, 123456)->toDateTimeString();$dt->timestamp(169957925); // Note: timestamps are UTC but do not change the date timezone$dt->timezone('Europe/London')->tz('America/Toronto')->setTimezone('America/Vancouver');
轻松地获取到韶光周期
我们会常常去获取开始韶光爱你和结束韶光,比如一天的开始韶光和结束韶光,本周的开始韶光和结束韶光,今年的开始韶光和结束韶光,现在用它险些不须要任何处理,直接调用内置方法就够了。
$dt = new Carbon('2012-01-31 15:32:45.654321');echo $dt->startOfSecond()->format('s.u'); // 45.000000$dt = new Carbon('2012-01-31 15:32:45.654321');echo $dt->endOfSecond()->format('s.u'); // 45.999999$dt = new Carbon('2012-01-31 15:32:45.654321');echo $dt->startOf('second')->format('s.u'); // 45.000000$dt = new Carbon('2012-01-31 15:32:45.654321');echo $dt->endOf('second')->format('s.u'); // 45.999999// ->startOf() and ->endOf() are dynamic equivalents to those methods$dt = Carbon::create(2012, 1, 31, 15, 32, 45);echo $dt->startOfMinute(); // 2012-01-31 15:32:00$dt = Carbon::create(2012, 1, 31, 15, 32, 45);echo $dt->endOfMinute(); // 2012-01-31 15:32:59$dt = Carbon::create(2012, 1, 31, 15, 32, 45);echo $dt->startOfHour(); // 2012-01-31 15:00:00$dt = Carbon::create(2012, 1, 31, 15, 32, 45);echo $dt->endOfHour(); // 2012-01-31 15:59:59$dt = Carbon::create(2012, 1, 31, 15, 32, 45);echo Carbon::getMidDayAt(); // 12echo $dt->midDay(); // 2012-01-31 12:00:00Carbon::setMidDayAt(13);echo Carbon::getMidDayAt(); // 13echo $dt->midDay(); // 2012-01-31 13:00:00Carbon::setMidDayAt(12);$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(); // 2001-01-01 00:00:00$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->endOfCentury(); // 2100-12-31 23:59:59$dt = Carbon::create(2012, 1, 31, 12, 0, 0);echo $dt->startOfWeek(); // 2012-01-30 00:00:00var_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:59var_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:00var_dump($dt->dayOfWeek == Carbon::WEDNESDAY); // bool(true)echo $dt->next('Wednesday'); // 2012-02-08 00:00:00echo $dt->next('04:00'); // 2012-02-08 04:00:00echo $dt->next('12:00'); // 2012-02-08 12:00:00echo $dt->next('04:00'); // 2012-02-09 04:00:00$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:00var_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:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->firstOfMonth(); // 2014-05-01 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->firstOfMonth(Carbon::MONDAY); // 2014-05-05 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->lastOfMonth(); // 2014-05-31 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->lastOfMonth(Carbon::TUESDAY); // 2014-05-27 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->nthOfMonth(2, Carbon::SATURDAY); // 2014-05-10 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->firstOfQuarter(); // 2014-04-01 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->firstOfQuarter(Carbon::MONDAY); // 2014-04-07 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->lastOfQuarter(); // 2014-06-30 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->lastOfQuarter(Carbon::TUESDAY); // 2014-06-24 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->nthOfQuarter(2, Carbon::SATURDAY); // 2014-04-12 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->startOfQuarter(); // 2014-04-01 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->endOfQuarter(); // 2014-06-30 23:59:59echo Carbon::create(2014, 5, 30, 0, 0, 0)->firstOfYear(); // 2014-01-01 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->firstOfYear(Carbon::MONDAY); // 2014-01-06 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->lastOfYear(); // 2014-12-31 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->lastOfYear(Carbon::TUESDAY); // 2014-12-30 00:00:00echo Carbon::create(2014, 5, 30, 0, 0, 0)->nthOfYear(2, Carbon::SATURDAY); // 2014-01-11 00:00:00echo Carbon::create(2018, 2, 23, 0, 0, 0)->nextWeekday(); // 2018-02-26 00:00:00echo Carbon::create(2018, 2, 23, 0, 0, 0)->previousWeekday(); // 2018-02-22 00:00:00echo Carbon::create(2018, 2, 21, 0, 0, 0)->nextWeekendDay(); // 2018-02-24 00:00:00echo Carbon::create(2018, 2, 21, 0, 0, 0)->previousWeekendDay(); // 2018-02-18 00:00:00
更多用法
实际上carbon还有很多的用法,比如跨时区打算实际的发生时差,按各种不同的标准输出等等。
特点1. 易学易用:Carbon扩展了PHP的DateTime类,使其更加友好、易学。
2. 链式操作:Carbon支持链式操作,可以在一行代码中完成多个日期操作。
3. 兼容性强:由于基于PHP DateTime类,Carbon具有与PHP内置DateTime的大部分功能和兼容性,因此在很多地方都可以直接更换原生的DateTime类。
4. 多措辞支持:Carbon支持多措辞,可以根据须要设置日期的措辞格式。
总之,nesbot/carbon是一个十分实用的日期韶光处理扩展库,具有易学易用、链式操作、兼容性强、多措辞支持等多个优点。它简化了PHP的日期处理代码,让开发更加高效、快捷。
原文标题:[nesbot/carbon]轻松优雅的驾驭韶光处理
原文地址:https://phpreturn.com/index/a644b5fd15ec31.html
原文平台:PHP武器库
版权声明:本文由phpreturn.com(PHP武器库官网)原创和首发,所有权利归phpreturn(PHP武器库)所有,本站许可任何形式的转载/引用文章,但必须同时注明出处。