Yii2中datetime类的使用


Posted in PHP onDecember 17, 2016

前言

以前更改时间格式的时候经常使用date方法,后来知道php竟然自带datetime类处理时间格式,记录一下用法,方便以后使用

实例化

在yii 1.1中,可以直接写成

$datetime = new DateTime;

但是在yii2 这么写就直接报错了,说找不到这个类,后来一查原来跟命名空间有关系所以在使用命名空间的框架中,就要这样写,加个斜杠

$datetime = new \DateTime;

使用

下面列一下这个类都可以输出那些格式

输出当前时间

$datetime = new \DateTime;
 print_r($datetime->format('Y-m-d H:i:s'));

输出给定的时间

$datetime = new \DateTime('2016-06-13');
print_r($datetime);

根据给定的时间格式化为自己想要的时间

$datetime = \DateTime::createFromFormat('Ymd', '20160618');
print_r($datetime->format('Y-m-d'));

输出Unix时间戳格式(方法1如果是1990年以前的会返回负数,而方法2则会返回false)

//方法1(php5.2):
$datetime = new \DateTime();
echo $datetime->format('U');exit;

//方法2(php5.3)推荐
$datetime = new \DateTime();
echo $datetime->getTimestamp();exit;

根据给定的时间戳格式化为给定的时间

$datetime = new \DateTime();
$datetime->setTimestamp(1465783744);
echo $datetime->format('Y-m-d H:i:s');

两个日期时间比对,年与年比对,月与月比对……

$datetime1 = new \DateTime('2016-01-01 10:11:18');
$datetime2 = new \DateTime('2017-05-11 22:21:21');
$interval = $datetime1->diff($datetime2);
print_r($interval->format('%Y'));
//%表示使用格式化,R表示是大于这个日期(+),还是小于这个日期(-),
//a表示大于或小于多少天,时分秒正常使用y,m,d,h,i,s

创建长度为几天前的时间

DateInterval构造函数的参数是一个表示时间间隔约定的字符串,这个时间间隔约定以字母P开头,后面跟着一个整数,最后是一个周期标识符,限定前面的整数。有效周期标识符如下: Y(年) M(月) D(日) W(周) H(时) M(分) S(秒) 间隔约定中既可以有时间也可以有日期,如果有时间需要在日期和时间之间加上字母T,例如,间隔约定P2D表示间隔两天,间隔约定P2DT5H2M表示间隔两天五小时两分钟。

$datetime = new \DateTime();
$interval = new \DateInterval('P2DT5H');
//或者使用createFromDateString方法
//$interval = \DateInterval::createFromDateString('1 month');
//修改DateTime实例
$datetime->add($interval);
echo $datetime->format('Y-m-d H:i:s');

创建几天前的时间

$datetime = new \DateTime();
$interval = new \DateInterval('P2DT5H');
$datetime->sub($interval);
echo $datetime->format('Y-m-d H:i:s');
//ps:有个modify方法,这个方法是减去30,并不是像前推1天,输出的还是12月
$datetime = new \DateTime('2014/12/31');
$datetime->modify( '-1 month' );
print_r($datetime);exit;

重置当前的DateTime对象的时间不同的日期,传递年,月,日

$datetime = new \DateTime();
$datetime->setDate(2015, 2, 28);
echo $datetime->format('Y-m-d');exit;

重置当前的DateTime对象的时间不同的时间,传递时,分,秒(可选参数)

$datetime = new \DateTime();
$datetime->setTime(20, 20, 24);
echo $datetime->format('Y-m-d H:i:s');exit;

格式化时间前更改时间的时区

$timezone = new \DateTimeZone('Asia/Calcutta');
$datetime = new \DateTime();
$datetime->setTimezone($timezone);
print_r($datetime->format('Y-m-d H:i:s'));exit;

返回时区

$date = new \DateTime(null, new DateTimeZone('Asia/Shanghai'));
 $tz = $date->getTimezone();
 echo $tz->getName();

计算两个时区的偏移值

$dateTimeZoneTaipei = new \DateTimeZone("Asia/Taipei");
$dateTimeZoneJapan = new \DateTimeZone("Asia/Tokyo");
$dateTimeTaipei = new \DateTime("now", $dateTimeZoneTaipei);
$dateTimeJapan = new \DateTime("now", $dateTimeZoneJapan);
$timeOffset = $dateTimeZoneJapan->getOffset($dateTimeTaipei);
print_r($timeOffset);exit;

返回时间间隔,多长时间

$interval = new \DateInterval('P2Y4DT6H8M');
echo $interval->format('%d days');

迭代输出距离当前日期的前几天日期。

DatePeriod类的构造方法接受三个参数而且都必须提供 一个DateTime实例,表示迭代开始的日期和时间 一个DateInterval实例,表示下一个日期和时间的间隔 一个整数,表示迭代的总次数 第四个参数是可选的,用于显式指定周期的结束日期和时间,如果迭代时想要排除开始日期和时间,可以把构造方法的最后一个参数设为DatePeriod::EXCLUDE_START_DATE常量:

$datetime = new \DateTime();
$interval = \DateInterval::createFromDateString('-1 day');
$period = new \DatePeriod($datetime, $interval, 3);
foreach ($period as $date) {
 echo $date->format('Y-m-d'), PHP_EOL;
}

PHP 相关文章推荐
PHP实现的功能是显示8条基色色带
Oct 09 PHP
php 在线打包_支持子目录
Jun 28 PHP
php minixml详解
Jul 19 PHP
PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】
Oct 11 PHP
PHP教程之PHP中shell脚本的使用方法分享
Feb 23 PHP
关于svn冲突的解决方法
Jun 21 PHP
php读取excel文件的简单实例
Aug 26 PHP
分享一个php 的异常处理程序
Jun 22 PHP
php实现mysql事务处理的方法
Dec 25 PHP
php实现生成验证码实例分享
Apr 10 PHP
Yii多表联合查询操作详解
Jun 02 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
php生成二维码图片方法汇总
Dec 17 #PHP
PHP二维数组去重算法
Dec 17 #PHP
php格式化时间戳
Dec 17 #PHP
PHP生成唯一ID之SnowFlake算法
Dec 17 #PHP
简单解决微信文章图片防盗链问题
Dec 17 #PHP
PHP 7.1新特性的汇总介绍
Dec 16 #PHP
浅谈PHP命令执行php文件需要注意的问题
Dec 16 #PHP
You might like
php session实现多级目录存放实现代码
2016/02/03 PHP
js indexOf()定义和用法
2012/10/21 Javascript
jQuery在iframe中无法弹出对话框的解决方法
2014/01/12 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
jquery控制表单输入框显示默认值的方法
2015/05/22 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
详解Javascript模板引擎mustache.js
2016/01/20 Javascript
基于jQuery实现Ajax验证用户名是否存在实例
2016/03/30 Javascript
js实现精确到秒的日期选择器完整实例
2016/04/30 Javascript
javascript解决小数的加减乘除精度丢失的方案
2016/05/31 Javascript
jQuery制作圣诞主题页面 更像是爱情影集
2016/08/10 Javascript
详解Angular2学习笔记之Html属性绑定
2018/01/03 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
python排序方法实例分析
2015/04/30 Python
python通过ssh-powershell监控windows的方法
2015/06/02 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
Python3模拟登录操作实例分析
2019/03/12 Python
简单了解Python生成器是什么
2019/07/02 Python
python sorted函数原理解析及练习
2020/02/10 Python
HTML5实现WebSocket协议原理浅析
2014/07/07 HTML / CSS
利达恒信公司.NET笔试题面试题
2016/03/05 面试题
自荐信封面
2013/12/04 职场文书
企业演讲稿范文
2013/12/28 职场文书
母亲节演讲稿范文
2014/01/02 职场文书
家长寄语大全
2014/04/02 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
高中教师考核方案
2014/05/18 职场文书
六年级学生评语大全
2014/12/26 职场文书
怎样写好工作计划
2019/04/10 职场文书
SqlServer 垂直分表(减少程序改动)
2021/04/16 SQL Server