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 相关文章推荐
一个简易需要注册的留言版程序
Oct 09 PHP
php文本转图片自动换行的方法
Mar 13 PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 PHP
详细解读PHP的Yii框架中登陆功能的实现
Aug 21 PHP
php简单统计在线人数的方法
May 10 PHP
jquery不支持toggle()高(新)版本的问题解决
Sep 24 PHP
PHP使用redis消息队列发布微博的方法示例
Jun 22 PHP
微信开发之获取JSAPI TICKET
Jul 07 PHP
php处理多图上传压缩代码功能
Jun 13 PHP
php实现小程序支付完整版
Oct 09 PHP
PDO::_construct讲解
Jan 27 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
Oct 30 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
这部番真是良心,画质好到像风景区,剧情让人跟着小公会热血沸腾
2020/03/10 日漫
PHP 文件上传源码分析(RFC1867)
2009/10/30 PHP
php fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
php读取txt文件并将数据插入到数据库
2016/02/23 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
基于JQuery制作的产品广告效果
2010/12/08 Javascript
javascript实现可键盘控制的抽奖系统
2016/03/10 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
jQuery根据ID、CLASS、等获取对象的实例
2016/12/04 Javascript
Node.js 的模块知识汇总
2017/08/16 Javascript
bootstrap-table组合表头的实现方法
2017/09/07 Javascript
vue系列之动态路由详解【原创】
2017/09/10 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
vue动态禁用控件绑定disable的例子
2019/10/28 Javascript
vue 解决数组赋值无法渲染在页面的问题
2019/10/28 Javascript
python基础教程之udp端口扫描
2014/02/10 Python
Python利用scapy实现ARP欺骗的方法
2019/07/23 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
Python 定义只读属性的实现方式
2020/03/05 Python
Python爬虫程序架构和运行流程原理解析
2020/03/09 Python
python logging 重复写日志问题解决办法详解
2020/08/04 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
澳大利亚在线床零售商:Bedworks
2020/09/01 全球购物
北京某公司的.net笔试题
2014/03/20 面试题
介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用?
2014/03/05 面试题
《路旁的橡树》教学反思
2014/04/07 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
大班下学期个人总结
2015/02/13 职场文书
欠款起诉书范文
2015/05/19 职场文书
公司管理建议书
2015/09/14 职场文书
在Java中Collection的一些常用方法总结
2021/06/13 Java/Android
vue中 this.$set的使用详解
2021/11/17 Vue.js
Nginx图片服务器配置之后图片访问404的问题解决
2022/03/21 Servers
使用Canvas绘制一个游戏人物属性图
2022/03/25 Javascript