专栏首页程序员小助手PHP自带的DateTime类,Carbon扩展类,真正的“相见恨晚!”

PHP自带的DateTime类,Carbon扩展类,真正的“相见恨晚!”

PHP有一个名为DateTime的类,可以帮助您读取、写入、比较或计算日期和时间。除了DATETIME之外,PHP中还有许多与日期和时间相关的函数,但它为大多数常见用途提供了良好的面向对象接口。它可以处理时区,但这不在这个简短的介绍范围之内。

要开始使用DateTime,请使用createFromFormat()工厂方法将原始日期和时间字符串转换为对象,或者执行新的DateTime以获取当前日期和时间。使用format()方法将日期时间转换回用于输出的字符串。

<?php$raw = '22. 11. 1968';$start = DateTime::createFromFormat('d. m. Y', $raw);echo 'Start date: ' . $start->format('Y-m-d') . "\n";

使用DateInterval类可以使用DateTime进行计算。DateTime有像add()和sub()这样的方法,它们以DateInterval为参数。不要编写期望每天都有相同秒数的代码,夏令时和时区更改都会打破这一假设。改为使用日期间隔。要计算日期差异,请使用diff()方法。它将返回新的DateInterval,非常容易显示。

<?php// 克隆一份 $start ,在其基础上加一个月零6天$end = clone $start;$end->add(new DateInterval('P1M6D'));$diff = $end->diff($start);echo 'Difference: ' . $diff->format('%m month, %d days (total: %a days)') . "\n";// 差值: 1 个月, 6 天 (总共: 37 天)

对于DateTime对象,您可以使用标准比较:

<?phpif ($start < $end) {    echo "Start is before the end!\n";}

最后一个演示DatePeriod类的示例。它用于迭代重复发生的事件。它可以接受两个DateTime对象,Start和End,以及返回这两个对象之间所有事件的间隔。

<?php// 输出 $start 和 $end 之间所有的周四$periodInterval = DateInterval::createFromDateString('first thursday');$periodIterator = new DatePeriod($start, $periodInterval, $end, DatePeriod::EXCLUDE_START_DATE);foreach ($periodIterator as $date) {    // 输出周期内的每个日期    echo $date->format('Y-m-d') . ' ';}

一个流行的PHP API扩展是Carbon。它继承了DateTime类中的所有内容,因此涉及的代码更改最少,但额外的功能包括本地化支持、添加、减去和格式化DateTime对象的进一步方法,以及通过模拟您选择的日期和时间来测试代码的方法。

Carbon提供了一些很好的功能来处理 PHP 中的日期,特别是诸如:

  • 处理时区
  • 轻松获取当前时间
  • 将 datetime 转换成可读的内容
  • 将英语短语解析成 datetime (first day of January 2016)
  • 日期的加减 (+ 2 weeks, -6 months)
  • 处理日期的语义方法

所有的这些都带来了一个非常有用的包,使得这些在 PHP 中处理时间非常容易。

// 获取当前时间  - 2015-12-19 10:10:54$current = Carbon::now();$current = new Carbon();// 获取今天 - 2015-12-19 00:00:00$today = Carbon::today();// 获取昨天 - 2015-12-18 00:00:00$yesterday = Carbon::yesterday();// 获取明天 - 2015-12-20 00:00:00$tomorrow = Carbon::tomorrow();// 解析特定字符串 - 2016-01-01 00:00:00$newYear = new Carbon('first day of January 2016');// 设定一个特定的时区 - 2016-01-01 00:00:00$newYearPST = new Carbon('first day of January 2016', 'America\Pacific');

Carbon 能做的远远不止这些。请务必查看 Carbon 官方文档。希望这能帮助你在 PHP 中更容易的使用日期 / 时间并加快开发效率!

本文分享自微信公众号 - 程序员小助手(mql45ea),作者:walles

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 3分钟短文 | PHP 求2个日期相差天数,兼容性好错误率低,收藏了

    在实际业务逻辑中,对时间戳,日期对象,日期字符串的处理,我们经常需要用到时间比较,还需要用到求日期差。比如对一场活动的倒计时,优惠券的过期时间等等。

    程序员小助手
  • MQL5从入门到精通【第四章】(二)循环语句

    程序中除了条件判断,就属循环用的多。为什么?同样的动作,你做一万次,累不累呀?用个循环,装一个变量,让计算机自己算去。您还别说,计算机就爱这个循环操作,那是他的...

    程序员小助手
  • Linux炫技:左手密码生成器,解放右手生产力!

    Linux的一大优点是,你可以用数百种不同的方式,达到相同的目的。甚至可以使用几十种不同的命令,完成生成随机密码这样简单的操作。

    程序员小助手
  • explicit_defaults_for_timestamp参数详解

    explicit_defaults_for_timestamp 系统变量决定MySQL服务端对timestamp列中的默认值和NULL值的不同处理方法。此变量自...

    MySQL技术
  • 任何时间都可以满足你的Arrow

    在 python 中有2个常用的时间处理库:datetime, time。 涉及到的时间类型有4种:string, datetime, time tuple, ...

    zhangqibot
  • 教程 | 预测电影偏好?如何利用自编码器实现协同过滤方法

    机器之心
  • 教程 | 预测电影偏好?如何利用自编码器实现协同过滤方法

    推荐系统使用协同过滤的方法,通过收集用户的偏好信息来预测特定用户的兴趣。协同过滤技术的基本假设是,如果用户 A 对某个问题与人 B 有相同的口味或意见,那么 A...

    IT派
  • 常用的Hql语句

    shirayner
  • 1063 计算谱半径 (20 分)

    可爱见见
  • ccnp第3讲之笔记 (eigrp)

    eigrp传送的是路由条目,但是接受到了路由条目的路由器并不会马上将条目加入路由表,而是根据接受到的所有路由条目构建一个全网拓扑,然后在计算出最佳路由,再将这个...

    py3study

扫码关注云+社区

领取腾讯云代金券