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 auth_http类库进行身份效验
Mar 19 PHP
PHP对象相互引用的内存溢出实例分析
Aug 28 PHP
VPS中使用LNMP安装WordPress教程
Dec 28 PHP
php单文件版在线代码编辑器
Mar 12 PHP
两种php给图片加水印的实现代码
Apr 18 PHP
php生成动态验证码gif图片
Oct 19 PHP
Symfony2框架学习笔记之表单用法详解
Mar 18 PHP
PHP简单检测网址是否能够正常打开的方法
Sep 04 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
Nov 03 PHP
php微信开发之谷歌测距
Jun 14 PHP
Thinkphp自定义生成缩略图尺寸的方法
Aug 05 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
Oct 23 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
法国:浪漫之都的咖啡文化
2021/03/03 咖啡文化
一个PHP的String类代码
2010/04/20 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
JavaScript多线程详解
2015/08/12 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
详解Vue中localstorage和sessionstorage的使用
2017/12/22 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
angularjs请求数据的方法示例
2019/08/06 Javascript
详解Vue 换肤方案验证
2019/08/28 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
Python3中bytes类型转换为str类型
2018/09/27 Python
在Django中URL正则表达式匹配的方法
2018/12/20 Python
python可视化实现代码
2019/01/15 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
Python实现TCP通信的示例代码
2019/09/09 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
python使用pandas抽样训练数据中某个类别实例
2020/02/28 Python
诺思信科技(南京)有限公司.NET笔试题答案
2013/07/06 面试题
介绍一下gcc特性
2012/01/20 面试题
入学申请自荐信范文
2014/02/26 职场文书
竞选班干部演讲稿100字
2014/08/20 职场文书
护理见习报告范文
2014/11/03 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
清明节主题班会
2015/08/14 职场文书
简短的人生哲理(38句)
2019/08/13 职场文书
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
Python pandas之求和运算和非空值个数统计
2021/08/07 Python