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 相关文章推荐
通过ICQ网关发送手机短信的PHP源程序
Oct 09 PHP
php面向对象全攻略 (十七) 自动加载类
Sep 30 PHP
PHP 模拟$_PUT实现代码
Mar 15 PHP
php防止sql注入代码实例
Dec 18 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
用PHP代码在网页上生成图片
Jul 01 PHP
使用PHP编写发红包程序
Jul 22 PHP
微信公众号开发客服接口实例代码
Oct 21 PHP
微信 开发生成带参数的二维码的实例
Nov 23 PHP
PHP中常见的密码处理方式和建议总结
Oct 14 PHP
yii2 url重写并隐藏index.php方法
Dec 10 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
Oct 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 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
关于php 高并发解决的一点思路
2017/04/16 PHP
基于jquery的拖动布局插件
2011/11/25 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
webpack+vue.js快速入门教程
2016/10/12 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
webpack中的模式(mode)使用详解
2020/02/20 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
修改NPM全局模式的默认安装路径的方法
2020/12/15 Javascript
python基础教程之循环介绍
2014/08/29 Python
Python深入学习之装饰器
2014/08/31 Python
Python中扩展包的安装方法详解
2017/06/14 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
2018/06/22 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
Python列表对象实现原理详解
2019/07/01 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
2019/08/22 Python
Python 格式化打印json数据方法(展开状态)
2020/02/27 Python
Python xlrd模块导入过程及常用操作
2020/06/10 Python
检测浏览器对HTML5和CSS3支持度的方法
2015/06/25 HTML / CSS
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
工程造价专业大专生求职信
2013/10/06 职场文书
母亲节演讲稿范文
2014/01/02 职场文书
竞职演讲稿范文
2014/01/11 职场文书
生物技术专业求职信
2014/06/10 职场文书
煤矿开采专业求职信
2014/07/08 职场文书
大学感恩节活动总结
2015/05/05 职场文书
人代会简报
2015/07/21 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL