laravel 日期与实践处理包 Carbon

//引入

use Carbon\Carbon;

//使用

  echo Carbon::now(); //2016-10-14 20:21:20  //获取当前时间

// 直接使用字符串

  echo Carbon::now(‘Europe/London‘); //2016-10-14 20:21:20

// 或者

  echo Carbon::now(new DateTimeZone(‘Europe/London‘));

除 now() 外,还提供了 today()tomorrow()yesterday() 等静态函数,不过,它们的时间都是 00:00:00 :

  echo Carbon::now(); // 2016-10-14 15:18:34

  echo Carbon::today(); // 2016-10-14 00:00:00

  echo Carbon::tomorrow(‘Europe/London‘); // 2016-10-14 00:00:00

  echo Carbon::yesterday(); // 2016-10-14 00:00:00

默认情况下,Carbon 的方法返回的为一个日期时间对象。虽然它是一个对象,但是你却可以直接使用 echo 输出结果,因为有 __toString 魔术方法。但是如果你想把它转为字符串,可以使用 toDateString 或 toDateTimeString 方法:

  echo Carbon::today()->toDateTimeString();

  echo Carbon::yesterday()->toDateTimeString();

  echo Carbon::tomorrow()->toDateTimeString();

你还可以使用 parse 方法解析任何顺序和类型的日期(结果为 Carbon 类型的日期时间对象):

  1. echo Carbon::parse(‘2016-10-15‘)->toDateTimeString(); //2016-10-15 00:00:00
  2. echo Carbon::parse(‘2016-10-15‘)->toDateTimeString(); //2016-10-15 00:00:00
  3. echo Carbon::parse(‘2016-10-15 00:10:25‘)->toDateTimeString(); //2016-10-15 00:10:25
  4. echo Carbon::parse(‘today‘)->toDateTimeString(); //2016-10-15 00:00:00
  5. echo Carbon::parse(‘yesterday‘)->toDateTimeString(); //2016-10-14 00:00:00
  6. echo Carbon::parse(‘tomorrow‘)->toDateTimeString(); //2016-10-16 00:00:00
  7. echo Carbon::parse(‘2 days ago‘)->toDateTimeString(); //2016-10-13 20:49:53
  8. echo Carbon::parse(‘+3 days‘)->toDateTimeString(); //2016-10-18 20:49:53
  9. echo Carbon::parse(‘+2 weeks‘)->toDateTimeString(); //2016-10-29 20:49:53
  10. echo Carbon::parse(‘+4 months‘)->toDateTimeString(); //2017-02-15 20:49:53
  11. echo Carbon::parse(‘-1 year‘)->toDateTimeString(); //2015-10-15 20:49:53
  12. echo Carbon::parse(‘next wednesday‘)->toDateTimeString(); //2016-10-19 00:00:00
  13. echo Carbon::parse(‘last friday‘)->toDateTimeString(); //2016-10-14 00:00:00

你还可以使用单独的年月日来构造日期:

  1. $year = ‘2015‘;
  2. $month = ‘04‘;
  3. $day = ‘12‘;
  4. echo Carbon::createFromDate($year, $month, $day); //2015-04-12 20:55:59
  5. $hour = ‘02‘;
  6. $minute = ‘15‘:
  7. $second = ‘30‘;
  8. echo Carbon::create($year, $month, $day, $hour, $minute, $second); //2015-04-12 02:15:30
  9. echo Carbon::createFromDate(null, 12, 25); // 年默认为当前年份

日期操作可以通过 add (增加)或 sub (减去)跟上要增加或减去的单位来完成。例如,你想给一个日期增加指定的天数,你可以使用 addDays 方法。此外还提供了一个 modify 方法,参数格式为 + 或 - 跟上值及单位。所以,如果你想给当前日期增加一年,你可以传递 +1 year

  1. echo Carbon::now()->addDays(25); //2016-11-09 14:00:01
  2. echo Carbon::now()->addWeeks(3); //2016-11-05 14:00:01
  3. echo Carbon::now()->addHours(25); //2016-10-16 15:00:01
  4. echo Carbon::now()->subHours(2); //2016-10-15 12:00:01
  5. echo Carbon::now()->addHours(2)->addMinutes(12); //2016-10-15 16:12:01
  6. echo Carbon::now()->modify(‘+15 days‘); //2016-10-30 14:00:01
  7. echo Carbon::now()->modify(‘-2 days‘); //2016-10-13 14:00:01

在 Carbon 中你可以使用下面的方法来比较日期:

  • min –返回最小日期。
  • max – 返回最大日期。
  • eq – 判断两个日期是否相等。
  • gt – 判断第一个日期是否比第二个日期大。
  • lt – 判断第一个日期是否比第二个日期小。
  • gte – 判断第一个日期是否大于等于第二个日期。
  • lte – 判断第一个日期是否小于等于第二个日期。

  

  1. echo Carbon::now()->tzName; // America/Toronto
  2. $first = Carbon::create(2012, 9, 5, 23, 26, 11);
  3. $second = Carbon::create(2012, 9, 5, 20, 26, 11, ‘America/Vancouver‘);
  4. echo $first->toDateTimeString(); // 2012-09-05 23:26:11
  5. echo $first->tzName; // America/Toronto
  6. echo $second->toDateTimeString(); // 2012-09-05 20:26:11
  7. echo $second->tzName; // America/Vancouver
  8. var_dump($first->eq($second)); // bool(true)
  9. var_dump($first->ne($second)); // bool(false)
  10. var_dump($first->gt($second)); // bool(false)
  11. var_dump($first->gte($second)); // bool(true)
  12. var_dump($first->lt($second)); // bool(false)
  13. var_dump($first->lte($second)); // bool(true)
  14. $first->setDateTime(2012, 1, 1, 0, 0, 0);
  15. $second->setDateTime(2012, 1, 1, 0, 0, 0); // Remember tz is ‘America/Vancouver‘
  16. var_dump($first->eq($second)); // bool(false)
  17. var_dump($first->ne($second)); // bool(true)
  18. var_dump($first->gt($second)); // bool(false)
  19. var_dump($first->gte($second)); // bool(false)
  20. var_dump($first->lt($second)); // bool(true)
  21. var_dump($first->lte($second)); // bool(true)

要判断一个日期是否介于两个日期之间,可以使用 between() 方法,第三个可选参数指定比较是否可以相等,默认为 true

  1. $first = Carbon::create(2012, 9, 5, 1);
  2. $second = Carbon::create(2012, 9, 5, 5);
  3. var_dump(Carbon::create(2012, 9, 5, 3)->between($first, $second)); // bool(true)
  4. var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second)); // bool(true)
  5. var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second, false)); // bool(false)

此外还提供了一些辅助方法,你可以从它们的名字中明白其含义:

  1. $dt = Carbon::now();
  2. $dt->isWeekday();
  3. $dt->isWeekend();
  4. $dt->isYesterday();
  5. $dt->isToday();
  6. $dt->isTomorrow();
  7. $dt->isFuture();
  8. $dt->isPast();
  9. $dt->isLeapYear();
  10. $dt->isSameDay(Carbon::now());
  11. $born = Carbon::createFromDate(1987, 4, 23);
  12. $noCake = Carbon::createFromDate(2014, 9, 26);
  13. $yesCake = Carbon::createFromDate(2014, 4, 23);
  14. $overTheHill = Carbon::now()->subYears(50);
  15. var_dump($born->isBirthday($noCake)); // bool(false)
  16. var_dump($born->isBirthday($yesCake)); // bool(true)
  17. var_dump($overTheHill->isBirthday()); // bool(true) -> default compare it to today!

diffForHumans

“一个月前”比“30 天前”更便于阅读,很多日期库都提供了这个常见的功能,日期被解析后,有下面四种可能性:

  • 当比较的时间超过当前默认时间

    • 1天前
    • 5月前
  • 当用将来的时间与当前默认时间比较
    • 1小时距现在
    • 5月距现在
  • 当比较的值超过另一个值
    • 1小时前
    • 5月前
  • 当比较的值在另一个值之后
    • 1小时后
    • 5月后

你可以把第二个参数设置为 true 来删除“前”、“距现在”等修饰语:diffForHumans(Carbon $other, true)

  1. echo Carbon::now()->subDays(5)->diffForHumans(); // 5天前
  2. echo Carbon::now()->diffForHumans(Carbon::now()->subYear()); // 1年后
  3. $dt = Carbon::createFromDate(2011, 8, 1);
  4. echo $dt->diffForHumans($dt->copy()->addMonth()); // 1月前
  5. echo $dt->diffForHumans($dt->copy()->subMonth()); // 11月后
  6. echo Carbon::now()->addSeconds(5)->diffForHumans(); // 5秒距现在
  7. echo Carbon::now()->subDays(24)->diffForHumans(); // 3周前
  8. echo Carbon::now()->subDays(24)->diffForHumans(null, true); // 3周
时间: 2024-08-02 00:13:36

laravel 日期与实践处理包 Carbon的相关文章

Laravel入门及实践,快速上手社交系统ThinkSNS+二次开发

[摘要]自从社交系统ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之后,很多人都说技术门槛抬高了,其实你与TS+的距离仅仅只是学习一个新框架而已,所以,我们今天来说说Laravel的入门. 温馨提示: l 本文纯干货,文字和代码居多,且适合零基础Laravel学习者: l 本文会新建一个名为 blog 的 Laravel 程序,这是一个非常简单的博客. 本文主要内容: · 新建 Laravel 程序,如何连接数据库: · Laravel 程序的基本文件结构: · MVC(模

R语言︱H2o深度学习的一些R语言实践——H2o包

R语言H2o包的几个应用案例 笔者寄语:受启发想了解H2o平台的一些R语言实现,网上已有一篇H2o的demo文件.笔者在这多贴一些案例,并且把自己实践的一些小例子贴出来. 关于H2o平台长啥样,可以看H2o的官网,关于深度学习长啥样,可以看一些教程,比如ParallelR博客之中的解析. 下面主要是贴几个案例,让大家看看. ------------------------------------------------------------ Matt︱R语言调用深度学习架构系列引文 R语言︱H

类库日期和jsp导包

一.日期类库 1.1. Date Date类创建一个时间,或者是创建一个与你计算机当前的时间:精确到毫秒. //实例化时间类 Date date = new Date(); 1.2.格式转换类 1.2.1.   DateFomat类 DateFomat是一个抽象类 DateFormat 的使用就不介绍了,主要是记录一下用到的格式模式. 字母 日期或时间元素 表示 示例 G Era 标志符 Text AD y 年 Year 1996; 96 M 年中的月份 Month July; Jul; 07

Python学习笔记9:标准库之日期时间(time包,datetime包)

一 time包 sleep([float time]) 延迟一段以浮点数表示的秒数 time包基于C语言的库函数(library functions). Python的解释器一般是用C编写的,Python的一些函数也会直接调用C语言的库函数. time.time()获得当前时间,返回float型, 单位:秒 time.clock()在UNIX系统上,它返回的是"进程时间",它是用秒表示的浮点数(时间戳). 而在WINDOWS中,第一次调用,返回的是进程执行的实际时间.而第二次之后的调用

Laravel + go-micro + grpc 实践基于 Zipkin 的分布式链路追踪系统 摘自https://mp.weixin.qq.com/s/JkLMNabnYbod-b4syMB3Hw?

分布式调用链跟踪系统,属于监控系统的一类.系统架构逐步演进时,后期形态往往是一个平台由很多不同的服务.组件构成,用户请求过来后,可能会经过其中多个服务,如图 不过,出问题时往往很难排查,如整个请求变慢.偶尔报错.不可用等,我们很难得知具体是由哪一个或哪些服务引起的,通常开发同学都会互相甩锅,最后不得不花大量时间人肉 tracing 项目初期时,可以简单处理,通过生成唯一 request_id ,在各个方法记录日志,方便排查问题.中后期系统拆分为各个子服务时,要么继续推进原有的 request_i

Laravel SMS 短信发送包

Laravel Sms Laravel 贴合实际需求同时满足多种通道的短信发送组件 我们基于业务需求在 overtrue/easy-sms 基础进行扩展开发,主要实现如下目标: 支持短信验证码直接在 config 中配置模板ID 支持短信验证码自定义长度 支持短信验证码有效分钟,默认5分钟 支持短信验证码重试次数,防止用户意外输错验证码导致需要再次发送验证码的问题. 支持短信验证码未验证时,用户再次请求验证码,在有效分钟内验证码保持一致. 集成短信发送路由,支持 web 和 api 发送方式.

Laravel 安装多国语言包后,phpstorm 还是报错

问题: 解决办法: vagrant@homestead:~/Code/awbeci$ composer require "overtrue/laravel-lang:~3.0" 总结:我明明第一次就执行成功了,为什么第二次才成功,我真的有点纳闷,不过最后三行是第一次执行的时候没有出现的!!!

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 =

转:Laravel 项目开发规范

文件介绍很好 值得细细看看 https://www.jianshu.com/p/e464a35e5ed2 https://learnku.com/docs/laravel-specification/5.5 一. 说明 以下内容大部分引用Laravel China社区的文章 - 分享下团队的开发规范 ——<Laravel 项目开发规范>.相对而言,上面引用的文章的规范更加严格,但考虑到目前的情况,会适当地对一些规范进行更改和增删. 二. 目的 暂无 三. 优点 规范有一下优点: 高效编码 -