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中通过Ajax如何实现异步文件上传的代码实例
May 07 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
May 09 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
Nov 17 PHP
php中preg_match的isU代表什么意思
Oct 01 PHP
php+mysql实现的二级联动菜单效果详解
May 10 PHP
php监测数据是否成功插入到Mysql数据库的方法
Nov 25 PHP
PHP 无限级分类
May 04 PHP
PHP实现的日历功能示例
Sep 01 PHP
浅谈php的TS和NTS的区别
Mar 13 PHP
php菜单/评论数据递归分级算法的实现方法
Aug 01 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
May 27 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 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 团购折扣计算公式
2011/11/24 PHP
深入密码加salt原理的分析
2013/06/06 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
jQuery怎么解析Json字符串(Json格式/Json对象)
2013/08/09 Javascript
node.js中的console.error方法使用说明
2014/12/10 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
JavaScript整除运算函数ceil和floor的区别分析
2015/04/14 Javascript
前端性能优化及技巧
2016/05/06 Javascript
jquery.validate表单验证插件使用方法解析
2016/11/07 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
vue初始化动画加载的实例
2018/09/01 Javascript
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
JavaScript实现滑动门效果
2020/01/18 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
Vue watch响应数据实现方法解析
2020/07/10 Javascript
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
在Python中处理日期和时间的基本知识点整理汇总
2015/05/22 Python
速记Python布尔值
2017/11/09 Python
Python装饰器用法示例小结
2018/02/11 Python
儿童学习python的一些小技巧
2018/05/27 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
Django密码存储策略分析
2020/01/09 Python
会计自我鉴定
2014/02/04 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
公司晚会策划方案
2014/05/17 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
建议书格式
2015/02/04 职场文书
Python获取字典中某个key的value
2022/04/13 Python
springboot 全局异常处理和统一响应对象的处理方式
2022/06/28 Java/Android