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中include()与require()的区别说明
Mar 10 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
Mar 11 PHP
ThinkPHP3.1.3版本新特性概述
Jun 19 PHP
ThinkPHP模板判断输出Empty标签用法详解
Jun 30 PHP
Laravel框架学习笔记(一)环境搭建
Oct 15 PHP
php实现俄罗斯乘法实例
Mar 07 PHP
php和editplus正则表达式去除空白行
Apr 17 PHP
php源码分析之DZX1.5加密解密函数authcode用法
Jun 17 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
Oct 23 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
php cli 方式 在crotab中运行解决
2010/02/08 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
2013/06/27 PHP
php单链表实现代码分享
2016/07/04 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
javascript引导程序
2008/10/26 Javascript
JavaScript中setAttribute用法介绍
2013/07/20 Javascript
在javascript中实现函数数组的方法
2013/12/25 Javascript
jQuery 浮动导航菜单适合购物商品类型的网站
2014/09/09 Javascript
Javascript获取当前日期的农历日期代码
2014/10/08 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
数组Array的一些方法(总结)
2017/02/17 Javascript
nodejs前端自动化构建环境的搭建
2017/07/26 NodeJs
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
JS函数本身的作用域实例分析
2020/03/16 Javascript
[00:15]TI9观赛名额抽取
2019/07/10 DOTA
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
python文本数据相似度的度量
2018/03/12 Python
python实现二维插值的三维显示
2018/12/17 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
python__new__内置静态方法使用解析
2020/01/07 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
业务主管岗位职责
2013/11/20 职场文书
运动会通讯稿100字
2014/01/31 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
安全负责人任命书
2014/06/06 职场文书
工作失职检讨书范文
2015/05/05 职场文书
《圆的周长》教学反思
2016/02/17 职场文书