加入收藏 | 设为首页 | 会员中心 | 我要投稿 莆田站长网 (https://www.0594zz.com.cn/)- 业务安全、应用安全、终端安全、数据分析、数据应用!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

详细介绍PHP中时间处理类Carbon的用法

发布时间:2022-08-10 11:01:36 所属栏目:PHP教程 来源:互联网
导读:1.Introduction Carbon 是php的日期处理类库(A simple PHP API extension for DateTime.)。 Carbon 继承了PHP的 Datetime 类,所以 Carbon 中没有涉及到的,但在 Datetime 中已经实现的方法都是可以使用的。 看代码 ?php namespace Carbon; class Carbon e
  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

(编辑:莆田站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读