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 相关文章推荐
ADODB的数据库封包程序库
Dec 31 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
探讨PHP中this,self,parent的区别详解
Jun 08 PHP
一个漂亮的php验证码类(分享)
Aug 06 PHP
php+js实现图片的上传、裁剪、预览、提交示例
Aug 27 PHP
php 魔术方法详解
Nov 11 PHP
php堆排序实现原理与应用方法
Jan 03 PHP
PHP中串行化用法示例
Nov 16 PHP
phpMyAdmin通过密码漏洞留后门文件
Nov 20 PHP
CI框架附属类用法分析
Dec 26 PHP
Yii框架的redis命令使用方法简单示例
Oct 15 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 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
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
微信小程序 slider的简单实例
2017/04/19 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
node和vue实现商城用户地址模块
2018/12/05 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
[02:03]完美世界DOTA2联赛10月30日赛事集锦
2020/10/31 DOTA
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
Python中turtle库的使用实例
2019/09/09 Python
python retrying模块的使用方法详解
2019/09/25 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
python类中super() 的使用解析
2019/12/19 Python
tensorflow 环境变量设置方式
2020/02/06 Python
详解canvas多边形(蜘蛛图)的画法示例
2018/01/29 HTML / CSS
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
智能室内花园:Click & Grow
2021/01/29 全球购物
大学生毕业自我鉴定范文
2014/02/03 职场文书
婚纱摄影师求职信
2014/03/07 职场文书
出国签证在职证明
2014/09/20 职场文书
资料员岗位职责范本
2015/04/13 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
婚宴新娘致辞
2015/07/28 职场文书
Golang表示枚举类型的详细讲解
2021/09/04 Golang
详解Python如何批量采集京东商品数据流程
2022/01/22 Python
MySQL学习必备条件查询数据
2022/03/25 MySQL
Apache Hudi的多版本清理服务彻底讲解
2022/03/31 Servers
OpenStack虚拟机快照和增量备份实现方法
2022/04/04 Servers
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL