亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP 5.2日期、時間和時區處理詳解

2024-09-04 11:47:04
字體:
來源:轉載
供稿:網友

處理日期和時間需要考慮很多事情,例如日期的格式、時區、閏年和天數各異的月份,自己處理太容易出錯了,我們應該使用PHP 5.2.0引入的DateTime、DateIntervel和DateTimeZone這些類幫助我們創建及處理日期、時間和時區。

設置默認時區:

首先我們要為PHP中處理日期和時間的函數設置默認時區,如果不設置的話,PHP會顯示一個E_WARNING消息,設置默認時區有兩種方式,可以像下面這樣在php.ini中設置:

date.timezone = 'Asia/Shanghai';

也可以在運行時使用date_default_timezone_set()函數設置:

date_default_timezone_set('Asia/Shanghai');

這兩種方式都要求使用有效的時區標識符,PHP完整的時區標識符可以在這里找到:http://php.net/manual/zh/timezones.php

DateTime類

DateTime類提供了一個面向對象接口,用于管理日期和時間,一個DateTime實例表示一個具體的日期和時間,DateTime構造方法是創建DateTime新實例最簡單的方式:

$datetime = new DateTime();

如果沒有參數,DateTime類的構造方法創建的是一個表示當前日期和時間的實例。我們可以把一個字符串傳入DateTime類的構造方法以便指定日期和時間:

$datetime = new DateTime('2016-06-06 10:00 pm');

注:傳入的字符串參數必須是有效的日期和時間格式(http://php.net/manual/zh/datetime.formats.php)

理想情況下,我們會指定PHP能理解的日期和時間格式,可是實際情況并不總是如此,有時我們必須處理其它格式或出乎意料的格式,這時我們可以通過DateTime提供的靜態方法createFromFormat來使用自定義的格式創建DateTime實例,該方法的第一個參數是表示日期和時間格式的字符串,第二個參數是要使用這種格式的日期和時間字符串:

$datetime = DateTime::createFromFormat('M j, Y H:i:s', 'June 6, 2016 22:00:00');

注:也許你很眼熟,沒錯,DateTime::createFromFormat和date函數類似??捎玫娜掌跁r間格式參考這里:http://php.net/manual/zh/datetime.createfromformat.php

DateInterval類

處理DateTime實例之前需要先了解DateInterval類,DateInterval實例表示長度固定的時間段(比如兩天),或者相對而言的時間段(例如昨天),我們通常使用該類的實例來修改DateTime實例。例如,DateTime提供了用于處理DateTime實例的add和sub方法,這兩個方法的參數是一個DateInterval實例,表示從DateTime中增加的時間量或減少的時間量。

我們使用構造函數實例化DateInterval實例,DateInterval構造函數的參數是一個表示時間間隔約定的字符串,這個時間間隔約定以字母P開頭,后面跟著一個整數,最后是一個周期標識符,限定前面的整數。有效周期標識符如下:

  1. Y(年) 
  2. M(月) 
  3. D(日) 
  4. W(周) 
  5. H(時) 
  6. M(分) 
  7. S(秒) 

間隔約定中既可以有時間也可以有日期,如果有時間需要在日期和時間之間加上字母T,例如,間隔約定P2D表示間隔兩天,間隔約定P2DT5H2M表示間隔兩天五小時兩分鐘。

下面的實例演示了如何使用add方法將DateTime實例表示的日期和時間向后推移一段時間:

  1. //創建DateTime實例 
  2. $datetime = new DateTime('2016-06-06 22:00:00'); 
  3.  
  4. //創建長度為兩天的間隔 
  5. $interval = new DateInterval('P2D'); 
  6.  
  7. //修改DateTime實例 
  8. $datetime->add($interval); 
  9. echo $datetime->format('Y-m-d H:i:s'); 

我們還可以創建反向的DateInterval實例:

  1. $datetime = new DateTime(); 
  2. $interval = DateInterval::createFromDateString('-1 day'); 
  3. $period = new DatePeriod($datetime$interval, 3); 
  4. foreach ($period as $date) { 
  5.     echo $date->format('Y-m-d'), PHP_EOL; 

以上代碼輸出為:

  1. 2016-06-06 
  2. 2016-06-05 
  3. 2016-06-04 
  4. 2016-06-03 

DateTimeZone類

PHP使用DateTimeZone類表示時區,我們只需要把有效的時區標識符傳遞給DateTimeZone類的構造函數:

$timezone = new DateTimeZone('Asia/Shanghai');

創建DateTime實例通常需要使用DateTimeZone實例,DateTime類構造方法的第二個參數(可選)就是一個DateTimeZone實例,傳入這個參數后,DateTime實例的值以及對這個值的所有修改都相對于這個指定的時區,如果不傳入則使用的是前面設置的默認時區:

  1. $timezone = new DateTimeZone('Asia/Shanghai'); 
  2. $datetime = new DateTime('2016-06-06'$timezone); 

實例化之后還可以使用setTimezone方法修改DateTime實例的時區:

  1. $timezone = new DateTimeZone('Asia/Shanghai'); 
  2. $datetime = new DateTime('2016-06-06'$timezone); 
  3. $datetime->setTimezone(new DateTimeZone('Asia/Hong_kong')); 

DatePeriod類

有時我們需要迭代處理一段時間內反復出現的一系列日期和時間,DatePeriod類可以解決這個問題(前面已經用到過),DatePeriod類的構造方法接受三個參數而且都必須提供:

一個DateTime實例,表示迭代開始的日期和時間

一個DateInterval實例,表示下一個日期和時間的間隔

一個整數,表示迭代的總次數

DatePeriod是迭代器,每次迭代都會產出一個DateTime實例。DatePeriod的第四個參數是可選的,用于顯式指定周期的結束日期和時間,如果迭代時想要排除開始日期和時間,可以把構造方法的最后一個參數設為DatePeriod::EXCLUDE_START_DATE常量:

  1. $datetime = new DateTime(); 
  2. $interval = new DateInterval('P2D'); 
  3. $period = new DatePeriod($datetime$interval, 3, DatePeriod::EXCLUDE_START_DATE); 
  4. foreach ($period as $date) { 
  5.     echo $date->format('Y-m-d H:i:s'), PHP_EOL; 

打印的結果是:

2016-06-08

2016-06-10

2016-06-12

nesbot/carbon日期組件

如果經常需要處理日期和時間,應該使用nesbot/carbon組件(https://github.com/briannesbitt/Carbon),Laravel框架也是使用了這個組件處理日期和時間,該組件集成了常用的日期及時間處理API,其底層正是使用了我們上面提到的幾個日期時間處理類實現了各種功能,有興趣可以去研究下。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久国产精品网站| 中文字幕日韩高清| 国产美女精品视频免费观看| 欧美老女人www| 亚洲欧美激情另类校园| 亚洲欧美日韩中文在线| 亚洲性无码av在线| 97在线视频免费| 亚洲免费视频网站| 欧美精品激情在线| 亚洲999一在线观看www| 国产精品va在线| 国产在线精品一区免费香蕉| 91成人性视频| 欧美日韩亚洲视频一区| 亚洲成年人影院在线| 91精品久久久久久| 欧美亚洲国产日本| 国产精品视频中文字幕91| 色综合老司机第九色激情| 国产专区欧美专区| 日韩福利伦理影院免费| 精品中文字幕在线| 国产精品美女免费看| 国产成人精品视频在线| 亚洲乱亚洲乱妇无码| 日韩电影大全免费观看2023年上| 国产精品久久激情| 欧美精品videosex极品1| 日本高清视频精品| 国产99久久精品一区二区 夜夜躁日日躁| 久久99青青精品免费观看| 国产精品自产拍在线观看| 亚洲精品免费在线视频| 久久影视三级福利片| 国产成人自拍视频在线观看| 欧美精品电影在线| 亚洲国产欧美一区二区三区同亚洲| 欧美成人免费小视频| 国产精品美女午夜av| 欧美精品免费看| 亚洲精品在线视频| 亚洲视频专区在线| 国产精品爽爽爽爽爽爽在线观看| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲精品有码在线| 国产成人精品优优av| 性欧美在线看片a免费观看| 91免费的视频在线播放| 亚洲欧美激情精品一区二区| 日韩高清av一区二区三区| 国模精品系列视频| 欧美与欧洲交xxxx免费观看| 成人黄色av播放免费| 51ⅴ精品国产91久久久久久| 亚洲精品视频在线观看视频| 欧美激情视频三区| 欧美巨乳在线观看| 在线观看国产精品91| 国产国语videosex另类| 欧美日韩日本国产| 91精品国产自产91精品| 免费不卡在线观看av| 日韩欧美在线网址| 日韩电影免费观看在线观看| 日本高清不卡的在线| 高清欧美电影在线| 亚洲美女av在线播放| 亚洲qvod图片区电影| 国模极品一区二区三区| 精品久久久久久久久国产字幕| 91麻豆国产语对白在线观看| 欧美一区在线直播| 欧美国产视频一区二区| 亚洲欧美精品在线| 亚洲国产中文字幕久久网| 亚洲肉体裸体xxxx137| 国产精品丝袜一区二区三区| 久青草国产97香蕉在线视频| 国产精品视频免费观看www| 久久精品国亚洲| 91精品国产综合久久久久久蜜臀| 国语对白做受69| 色爱精品视频一区| 久久人体大胆视频| 岛国av一区二区在线在线观看| 91久久久久久久久久久| 欧美精品久久久久久久久| 欧美高清激情视频| 国产精品mp4| 岛国av午夜精品| 一区二区三区视频观看| 国产91精品最新在线播放| 久久成人免费视频| 亚洲天堂av在线播放| 国产成人精品国内自产拍免费看| 国产精品极品美女粉嫩高清在线| 色噜噜狠狠狠综合曰曰曰88av| 国产91精品久久久| 国产又爽又黄的激情精品视频| 九九热在线精品视频| 亚洲日韩中文字幕在线播放| 88xx成人精品| 亚洲一区二区三区毛片| 久久天天躁狠狠躁夜夜躁2014| xxav国产精品美女主播| 91久久精品视频| 久久久久久亚洲精品不卡| 欧美国产日韩一区二区| 欧美理论电影网| 一本一本久久a久久精品综合小说| 久久综合久久美利坚合众国| 国产精品第8页| 亚洲欧美一区二区精品久久久| 国产啪精品视频| 亚洲天堂av综合网| 中文字幕免费精品一区| 91精品视频免费| 久久影院免费观看| 久久久www成人免费精品| 2020欧美日韩在线视频| 97精品久久久| 最近2019年好看中文字幕视频| 欧美老少配视频| 欧美在线www| 久久男人av资源网站| 欧美精品情趣视频| 在线精品高清中文字幕| 久久人人爽人人爽人人片av高清| 中文字幕少妇一区二区三区| www.亚洲天堂| 欧美性猛交xxxx富婆| 国产精品久久久久久久一区探花| 亚洲精品福利免费在线观看| 欧美中文字幕在线视频| 日韩在线播放av| 欧美老女人性视频| 亚洲最大中文字幕| 久久高清视频免费| 午夜免费日韩视频| 日韩一级黄色av| 欧美日韩第一视频| 国内偷自视频区视频综合| 日韩免费av一区二区| 国产精品视频男人的天堂| 欧美极品第一页| 中文字幕亚洲图片| 色综合久久久888| 精品亚洲一区二区三区在线播放| 国产香蕉97碰碰久久人人| 中文字幕在线国产精品| 成人免费黄色网| 精品美女永久免费视频| 欧美极品第一页| 精品中文字幕在线观看| 色哟哟亚洲精品一区二区| 亚洲第一页自拍| 日韩亚洲综合在线| 中文字幕日韩在线视频| 国产精品成人国产乱一区| 国产精品欧美日韩久久| 精品一区二区三区四区| 欧美在线视频一区| 日韩精品极品视频免费观看|