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语法(5)
Oct 09 PHP
php2html php生成静态页函数
Dec 08 PHP
基于HTTP长连接的"服务器推"技术的php 简易聊天室
Oct 31 PHP
PHP设计模式 注册表模式
Feb 05 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
Jun 13 PHP
php实现斐波那契数列的简单写法
Jul 19 PHP
如何在HTML 中嵌入 PHP 代码
May 13 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
Apr 01 PHP
CakePHP框架Model函数定义方法示例
Aug 04 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
PHP操作Redis常用技巧总结
Apr 24 PHP
YII2框架中behavior行为的理解与使用方法示例
Mar 13 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转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
thinkphp整合系列之极验滑动验证码geetest功能
2019/06/18 PHP
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
2011/10/21 Javascript
js 程序执行与顺序实现详解
2013/05/13 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
JS如何实现文本框随文本的长度而增长
2015/07/30 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
bootstrap table使用入门基本用法
2017/05/24 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
Node.JS中快速扫描端口并发现局域网内的Web服务器地址(80)
2017/09/18 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
vue-cli构建vue项目的步骤详解
2019/01/27 Javascript
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
js属性对象的hasOwnProperty方法的使用
2021/02/05 Javascript
[00:44]TI7不朽珍藏III——军团指挥官不朽展示
2017/07/15 DOTA
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
python清除字符串里非字母字符的方法
2015/07/02 Python
python生成IP段的方法
2015/07/07 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
np.newaxis 实现为 numpy.ndarray(多维数组)增加一个轴
2019/11/30 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
python在CMD界面读取excel所有数据的示例
2020/09/28 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
巴黎欧莱雅法国官网:L’Oreal Paris
2019/04/30 全球购物
internal修饰符起什么作用
2013/12/16 面试题
生日派对邀请函
2014/01/13 职场文书
餐厅经理岗位职责和岗位目标
2014/02/13 职场文书
五星级酒店餐饮部总监的标准岗位职责
2014/02/17 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
2015年统战工作总结
2015/05/19 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python