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 相关文章推荐
mysql中存储过程、函数的一些问题
Feb 14 PHP
PHP If Else(elsefi) 语句
Apr 07 PHP
ajax返回值中有回车换行、空格的解决方法分享
Oct 24 PHP
phpexcel导入excel数据使用方法实例
Dec 24 PHP
PHP语法小结之基础和变量
Nov 22 PHP
PHP简单遍历对象示例
Sep 28 PHP
微信公众平台开发(五) 天气预报功能开发
Dec 03 PHP
老生常谈PHP位运算的用途
Mar 12 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
PHP实现的简单对称加密与解密方法实例小结
Aug 28 PHP
详细对比php中类继承和接口继承
Oct 11 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
Apr 15 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
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
PHP实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
php的ajax框架xajax入门与试用介绍
2010/12/19 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
javascript HTMLEncode HTMLDecode的完整实例(兼容ie和火狐)
2009/06/02 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
25个好玩的JavaScript小游戏分享
2011/04/22 Javascript
简体中文转换繁体中文(实现代码)
2013/12/25 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
jquery代码实现简单的随机图片瀑布流效果
2015/04/20 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
2016/05/24 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
用js实现before和after伪类的样式修改的示例代码
2017/09/07 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
vant 自定义 van-dropdown-item的用法
2020/08/05 Javascript
Python类的专用方法实例分析
2015/01/09 Python
python实现挑选出来100以内的质数
2015/03/24 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
2020/02/10 Python
python开发一款翻译工具
2020/10/10 Python
幼儿园中班评语大全
2014/04/17 职场文书
二年级评语大全
2014/04/23 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
2019年恭贺升学祝福语集锦
2019/08/15 职场文书
爱国之歌(8首)
2019/09/29 职场文书
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL