文档章节

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

程序员小助手
 程序员小助手
发布于 01/15 15:12
字数 954
阅读 0
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

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对象,StartEnd,以及返回这两个对象之间所有事件的间隔。

<?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)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

程序员小助手
粉丝 0
博文 199
码字总数 173831
作品 0
朝阳
高级程序员
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
6
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
6K
18
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
658
1
SQLServer实现split分割字符串到列

网上已有人实现sqlserver的split函数可将字符串分割成行,但是我们习惯了split返回数组或者列表,因此这里对其做一些改动,最终实现也许不尽如意,但是也能解决一些问题。 先贴上某大牛写的s...

cwalet
2014/05/21
9.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在Javascript数组的开头添加新的数组元素?

问题: I have a need to add or prepend elements at the beginning of an array. 我需要在数组的开头添加或添加元素。 For example, if my array looks like below: 例如,如果我的数组如下...

技术盛宴
24分钟前
11
0
神经网络的经典结构是怎么设计出来的?

神经网络的经典结构是怎么设计出来的? 哈哈哈的回答-知乎 https://www.zhihu.com/question/392634888/answer/1391574322 很多神经网络的结构,确实是炼丹,没有什么道理可言。 有一些神经网...

吃着火锅
48分钟前
37
0
误删除flutter中的IOS文件夹如何恢复

今天在使用IOS真机调试app时,由于第一次使用xcode工具,一头蒙,所以误操作删除了targets下Runner,直接导致不能使用。 关键是找不到怎么恢复。如出现下图所示,都可以使用本方法解决。 图1...

学渣要逆袭
51分钟前
24
0
2021张宇考研数学全程班视频百度云

2021张宇考研数学全程班视频百度云资料链接:https://shimo.im/docs/xwSaKVXpLewxjT6x/ 公众号:小麦麦资料库

a先生gg
56分钟前
44
0
内存泄漏和内存溢出

1. 内存泄漏和内存溢出的概念 内存溢出: 是指程序运行过程中申请的内存大于系统能够提供的内存,导致无法申请到足够的内存。 内存泄漏:是指程序运行过程中分配内存给临时变量,用完之后没有...

加油加油再加油
今天
31
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部