PHP 最佳實踐之日期、時間和時區

蕭瀟發表於2017-08-01

1).自己處理很容易出錯,建議使用從PHP5.2之後新增的DateTime、DateInterval和DateTimeZone類。
2).使用date_default_timezone_set('Asia/Shanghai');設定預設時區為中國時區,或者你也可以在php.ini檔案中配置。
3).使用DateTime管理時間和日期:

<?php
//沒有傳入引數返回當前日期和時間的例項
$datetime = new DateTime();
//傳入符合規範的時間格式
$datetime = new DateTime('2017-07-14 9:19 AM')
//有時我們必須處理那些不符合規範的時間格式t
$datetime = DateTime::createFromFormat('M j, y H:i:s', 'Jul 14, 2017 09:19:20');

4).DateTime::createFromFormate()靜態方法使用的日期格式與date()一樣。可以的日期和格式可以參見http://php.net/manual/zh/datetime.createfromformat.php
5).使用DateInterval偏移時間:

<?php
$datetime = new DateTime('2017-07-14 14:00:00');
$interval = new DateInterval('P2W');
$datetime->add($interval);
echo $datetime->format('Y-m-d H:i:s');

有效的週期標誌如下:

  • Y(年)
  • M(月)
  • D
  • W
  • H
  • M(分)
  • S
    間隔的週期中M即表示月,又表示分。所以怎麼區分呢?前3個表示日期,後面的表示時間,這就需要用字母T來分隔。可以使用T2M表示間隔兩秒。
    $dateStart = new \DateTime();
    $dateInterval = DateInterval::createFromDateString('-1 day');
    $datePeriod = new DatePeriod($dateStart, $dateInterval, 3);
    foreach ($datePeriod as $date) {
    echo $date->format('Y-m-d'), PHP_EOL;
    }

    5).DateTimeZone類:

    <?php
    $timezone = new DateTimeZone('Asia/Shanghai');
    $datetime = new DateTime('2017-07-14', $timezone);
    //使用setTimeZone()方法修改DateTime例項的時區
    $dateTIme->setTimezone(new DateTimeZone('Asia/Hongkong'));

    最好是一直使用UTC時間。伺服器使用,自己開發預設也是,然後存入資料庫也是,這樣的話把資料顯示給使用者看的話轉換為適當時區的日期和時間就行了。
    6).上面說到的DatePeriod類適合在迭代處理一段時間內反覆出現的一系列時期和時間,重複在日程表中記事就是一個很好的例子。
    7).nesbot/carbon元件是一個不錯的時間元件

專題系列

PHP專題系列目錄地址:https://github.com/xx19941215/webBlog
PHP專題系列預計寫二十篇左右,主要總結我們日常PHP開發中容易忽略的基礎知識和現代PHP開發中關於規範、部署、最佳化的一些實戰性建議,同時還有對Javascript語言特點的深入研究。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章