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 相关文章推荐
URL Rewrite的设置方法
Jan 02 PHP
php 获取当前访问的url文件名的方法小结
Feb 08 PHP
php echo 输出字符串函数详解
May 13 PHP
php生成随机密码的几种方法
Jan 17 PHP
php强制下载类型的实现代码
Apr 21 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
Sep 23 PHP
php实现用户在线时间统计详解
Oct 08 PHP
PHP 自定义错误处理函数的使用详解
May 10 PHP
PHP邮箱验证示例教程
Jun 01 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
Sep 11 PHP
微信公众号开发客服接口实例代码
Oct 21 PHP
PHP微信网页授权的配置文件操作分析
May 29 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
jquery checkbox全选、取消全选实现代码
2010/03/05 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
jQuery实现可展开折叠的导航效果示例
2016/09/12 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
JavaScript 用fetch 实现异步下载文件功能
2017/07/21 Javascript
vue-router 权限控制的示例代码
2017/09/21 Javascript
Angular中管道操作符(|)的使用方法
2017/12/15 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
简单说说angular.json文件的使用
2018/10/29 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
python版本的仿windows计划任务工具
2018/04/30 Python
flask-restful使用总结
2018/12/04 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
Julep官网:美容产品和指甲油
2017/02/25 全球购物
腾讯公司的一个sql题
2013/01/22 面试题
幼儿园保育员岗位职责
2014/04/13 职场文书
新手上路标语
2014/06/20 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
邀请书格式范文
2015/02/02 职场文书
农业项目投资意向书
2015/05/09 职场文书
学习经验交流会策划书
2015/11/02 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
JavaScript继承的三种方法实例
2021/05/12 Javascript
python异常中else的实例用法
2021/06/15 Python
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js