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);//设定时间
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容

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