PHP Date 使用备忘

乱象分析:

  1. 需要理解:时间=数值+时区
  2. 函数设计的过于随意,突显非OO思维的局限性。
  3. 涉及的转换关系: string、timestamp、Date、Array
  4. 最佳实践:统一到DateTime,再进行处理。

Unix Timestamp(数值)的获取

time(); //获取相对于Unix Epoch的整数型值,它代表“时间值”,它独立于时区。

时区设定的三种方法:

  1. php.ini的[Date]段中设置
[Date]
date.timezone ="Asia/Shanghai"
  1. 编码设定(优先级更高):
date_default_timezone_set('Asia/Shanghai');
ini_set('date.timezone','America/Los_Angeles');

根据分析,做出了以下测试:

//设置默认时区,否则将按GM时区
date_default_timezone_set("Asia/Shanghai");//'America/Los_Angeles'
echo "项目的默认时区为:",date_default_timezone_get(),PHP_EOL;

//timestamp转换为string
date('Y-m-d h:I:sP',time()); //按“默认时区”的当前时间(time()省略效果相同)
gmdate('Y-m-d h:I:sP',time());//按“GMT时区”的当前时间

//string转换为Date
//根据字符串和时区,生成"时间对象"(时区不设置,将按默认时区)
$date=date_create("2013-03-15 23:40:00",timezone_open("Asia/Shanghai"));
//此方法更加一般化,也更加实用
$date=date_create_from_format("d/m/Y H:i:s","15/10/2013 23:40:00",timezone_open("Asia/Shanghai"));

//Date转换为string
$fdate=date_format($date,'y-m-d H:i:s P');

//Date转换为timestamp
date_timestamp_get($date);

//timestamp转换为Date
$date=date_create();//按照默认时区的当前时间获取
date_timestamp_set($date,time());

其它的实用测试:

echo PHP_EOL,'改变时区的测试:';
$date=date_create();
echo PHP_EOL, "北京时间(默认时区):",date_format($date,'y-m-d H:i:s P');
date_timezone_set($date,timezone_open('Asia/Tokyo'));//改变时区
echo PHP_EOL, "日本东京时间:",date_format($date,'y-m-d H:i:s P');


echo PHP_EOL,'时间偏移的测试';
$d1=date_create();
date_modify($d1,'-1 Months');
echo date_format($d1,'m');

DateTime对象的使用

<?php
date_default_timezone_set('Asia/Shanghai');
//date_default_timezone_set('America/Los_Angeles');

$date1=date_create('1999-09-10 10:10:20');//默认时区
//指定时区
$date=date_create('1999-09-10 10:10:20',timezone_open('America/Los_Angeles'));
//对象方式的构建
$date=new DateTime('1999-09-10 10:10:20',timezone_open('America/Los_Angeles'));
//当前时区,当前时间
$date=new DateTime();

echo $date->format('Y-m-d H:i:sP');//比date_formate()更好的格式化方式
//添加1年2月3天4小时
$date->add(new DateInterval('P1Y2M3DT4H'));
//date_add($date,new DateInterval('P1Y1MT1H')); //函数式
$date->sub(new DateInterval('P2Y2M3DT4H'));//减的方式
//比较时间的差
$dateInterval=$date->diff($date1);
$dateInterval->y;//相关的年份数


$date->getTimezone()->getName();//获取时区
$date->setTimezone(timezone_open("'America/Los_Angeles'"));//设定时区
$date->getOffset();//获取偏移的秒数
$date->getTimestamp(); //获取时间值
$date->setTimestamp(time());//设定时间值
//$date->setDate ($year, $month, $day);//设定日期
//$date->setTime ($hour, $minute, $second=0, $microseconds=0);//设定时间
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,640评论 0 4
  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,918评论 6 13
  • 总结了一些开发中常用的函数: usleep() //函数延迟代码执行若干微秒。 unpack() //函数从二进制...
    ADL2022阅读 3,332评论 0 3
  • Java 语言支持的类型分为两类:基本类型和引用类型。整型(byte 1, short 2, int 4, lon...
    xiaogmail阅读 5,180评论 0 10
  • 【说在前面】: 感谢大家对我直播的支持 希望我的 抑郁症诊疗室,有为你答疑解惑噢❥ 映客直播 映客号:140830...
    左灯右右右行阅读 14,312评论 99 56

友情链接更多精彩内容