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漏洞小结
Feb 05 PHP
解析php中var_dump,var_export,print_r三个函数的区别
Jun 21 PHP
php对二维数组进行排序的简单实例
Dec 19 PHP
ECMall支持SSL连接邮件服务器的配置方法详解
May 19 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
ioncube_loader_win_5.2.dll的错误解决方法
Jan 04 PHP
PHP yii实现model添加默认值的方法(两种方法)
Nov 10 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
Yii2框架加载css和js文件的方法分析
May 25 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 PHP
使用Entrust扩展包在laravel 中实现RBAC的功能
Mar 16 PHP
PHP设计模式(观察者模式)
Jul 07 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自动选择 连接本地还是远程数据库
2010/12/02 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
JQuery 插件制作实践 xMarquee插件V1.0
2010/04/02 Javascript
指定位置如果有图片显示图片,无图片显示广告的JS
2010/06/05 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
Node.js编码规范
2014/07/14 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
Angular directive递归实现目录树结构代码实例
2017/05/05 Javascript
Vue filters过滤器的使用方法
2017/07/14 Javascript
javascript兼容性(实例讲解)
2017/08/15 Javascript
客户端(vue框架)与服务器(koa框架)通信及服务器跨域配置详解
2017/08/26 Javascript
js实现图片放大展示效果
2017/08/30 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
Python中的rfind()方法使用详解
2015/05/19 Python
python中将两组数据放在一起按照某一固定顺序shuffle的实例
2019/07/15 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
华为的Java面试题
2014/03/07 面试题
客户代表实习人员自我鉴定
2013/09/27 职场文书
2014年教师培训的自我评价
2014/01/03 职场文书
优秀党员主要事迹
2014/01/19 职场文书
新闻编辑专业毕业自荐书范文
2014/02/05 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
员工工作表现自我评价
2015/03/06 职场文书
个人廉洁自律总结
2015/03/06 职场文书
2015年电厂工作总结范文
2015/05/13 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
Docker 镜像介绍以及commit相关操作
2022/04/13 Servers
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python