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 相关文章推荐
建立动态的WML站点(一)
Oct 09 PHP
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
Mar 16 PHP
php动态实现表格跨行跨列实现代码
Nov 06 PHP
分享下PHP register_globals 值为on与off的理解
Sep 26 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
Jun 23 PHP
PHP+Ajax实时自动检测是否联网的方法
Jul 01 PHP
php实现在站点里面添加邮件发送的功能
Apr 28 PHP
session 加入redis的实现代码
Jul 15 PHP
PHP CURL与java http使用方法详解
Jan 26 PHP
PHP单例模式实例分析【防继承,防克隆操作】
May 22 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
Feb 18 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
mysql5详细安装教程
2007/01/15 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
JavaScript requestAnimationFrame动画详解
2017/09/14 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
vue操作动画的记录animate.css实例代码
2019/04/26 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
2019/06/17 Javascript
Layui tree 下拉菜单树的实例代码
2019/09/21 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
Python中操作文件之write()方法的使用教程
2015/05/25 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
python下如何查询CS反恐精英的服务器信息
2017/01/17 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
详解Python 正则表达式模块
2018/11/05 Python
python实现图片彩色转化为素描
2019/01/15 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
2020/06/06 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
HTML5中的postMessage API基本使用教程
2016/05/20 HTML / CSS
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
高中生家长会演讲稿
2014/01/14 职场文书
法学专业自我鉴定
2014/02/05 职场文书
计算机应届毕业生自荐信范文
2014/02/23 职场文书
环境工程专业自荐信
2014/03/03 职场文书
小学社团活动总结
2014/06/27 职场文书
统计工作个人总结
2015/03/03 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
Pytorch DataLoader shuffle验证方式
2021/06/02 Python
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle
Python 图片添加美颜效果
2022/04/28 Python