欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

laravel Carbon 函数 有大用

快速切换前后日期


<?php


use Carbon\Carbon;


$now = Carbon::now();

echo $now;                               // 2015-03-26 00:36:47

$today = Carbon::today();

echo $today;                             // 2015-03-26 00:00:00

$tomorrow = Carbon::tomorrow('Europe/London');

echo $tomorrow;                          // 2015-03-27 00:00:00

$yesterday = Carbon::yesterday();

echo $yesterday;                         // 2015-03-25 00:00:00

建立特定日期的时间


<?php


use Carbon\Carbon;


$timezone = 'Asia/Taipei';


// 从「年月日」建立

Carbon::createFromDate($year, $month, $day, $timezone);


// 从「时分秒」建立

Carbon::createFromTime($hour, $minute, $second, $timezone);


// 从完整的「年月日时分秒」建立

Carbon::create($year, $month, $day, $hour, $minute, $second, $timezone);


// 从指定的格式建立

Carbon::createFromFormat($format, $time, $tz);

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


// 从时间戳記建立

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

转换日期


<?php


use Carbon\Carbon;


// 透过文字移动日期

$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

取得日期资料


<?php


use Carbon\Carbon;


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


// 取的指定时间资料的资讯(整数)

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(39) calculated vs now in the same tz

var_dump($dt->quarter);                                      // int(3)



// 回传与 UTC 差异的秒数

var_dump(Carbon::createFromTimestampUTC(0)->offset);         // int(0)

var_dump(Carbon::createFromTimestamp(0)->offset);            // int(-18000)


// 回传与 UTC 差异的时数

var_dump(Carbon::createFromTimestamp(0)->offsetHours);       // int(-5)


// 找出当天日否有日光节约时间

var_dump(Carbon::createFromDate(2012, 1, 1)->dst);           // bool(false)

var_dump(Carbon::createFromDate(2012, 9, 1)->dst);           // bool(true)


// 判断指定的的时区是否与预设的时区相同

var_dump(Carbon::now()->local);                              // bool(true)

var_dump(Carbon::now('America/Vancouver')->local);           // bool(false)


// 判断是否为 UTC 的时区时间

var_dump(Carbon::now()->utc);                                // bool(false)

var_dump(Carbon::now('Europe/London')->utc);                 // bool(true)

var_dump(Carbon::createFromTimestampUTC(0)->utc);            // bool(true)


// 取得时区实例

echo get_class(Carbon::now()->timezone);                     // DateTimeZone

echo get_class(Carbon::now()->tz);                           // DateTimeZone


// 取得时区实例的名称

echo Carbon::now()->timezoneName;                            // America/Toronto

echo Carbon::now()->tzName;                                  // America/Toronto

设定时间资料


<?php


use Carbon\Carbon;


$dt = Carbon::now();


$dt->year = 1975;

$dt->month = 13;             // 年份会强制 +1,且月份变为 1 月

$dt->month = 5;

$dt->day = 21;

$dt->hour = 22;

$dt->minute = 32;

$dt->second = 5;


$dt->timestamp = 169957925;  // 这个设定不会变更时区


// 透过字串或是 DateTimeZone 实例去设定时区

$dt->timezone = new DateTimeZone('Europe/London');

$dt->timezone = 'Europe/London';

$dt->tz = 'Europe/London';




// 链结设定方式

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

格式化时间资料


<?php


use Carbon\Carbon;


$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


// 仍可以使用 format() 函式

echo $dt->format('l jS \\of F Y h:i:s A');         // Thursday 25th of December 1975 02:15:16 PM


// 常用的时间格式

echo $dt->toAtomString();      // in 1 Jahr

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

比较时间差异


<?php


use Carbon\Carbon;


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)




// 时间区间比较

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



// 时间大小比较

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



// 时间差异运算

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

时间状态


<?php


use Carbon\Carbon;


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

var_dump($born->isBirthday($noCake));              // bool(false)  

var_dump($born->isBirthday($yesCake));             // bool(true)

时间运算


<?php


use Carbon\Carbon;


$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

人类阅读时间格式


<?php


use Carbon\Carbon;


// 通常会用在留言的时间显示

// 该时间会比较与現在的时间的差异

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

时间常数


<?php


use Carbon\Carbon;


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)

參考资料


Carbon - A simple PHP API extension for DateTime.

Carbon - docs


来自  http://blog.csdn.net/lbwo001/article/details/53063867

普通分类: