Hướng dẫn php timezone utc

If by client, you mean browser, then you first need to send the timezone name to PHP from the browser, then do the conversion as described below.

Show

    Answer

    Convert the UTC datetime to America/Denver

    // create a $dt object with the UTC timezone
    $dt = new DateTime('2016-12-12 12:12:12', new DateTimeZone('UTC'));
    
    // change the timezone of the object without changing its time
    $dt->setTimezone(new DateTimeZone('America/Denver'));
    
    // format the datetime
    $dt->format('Y-m-d H:i:s T');
    

    This works with dates after 2032, daylight savings and leap seconds and does not depend on the host machine locale or timezone.

    It uses the timezonedb to do the calculation, this db changes over time as timezone rules change and has to be kept up to date. (see notes at the bottom)

    To convert the UTC date to the server (local) time, you can use DateTime without the second argument, which defaults to the server timezone.

    // create a $dt object with the UTC timezone
    $dt = new DateTime('2016-12-12 12:12:12', new DateTimeZone('UTC'));
    
    // get the local timezone
    $loc = (new DateTime)->getTimezone();
    
    // change the timezone of the object without changing its time
    $dt->setTimezone($loc);
    
    // format the datetime
    $dt->format('Y-m-d H:i:s T');
    

    Answer 2

    I recommend using DateTimeImmutable because it doesn't mutate variables (doesn't change them behind the scenes), otherwise it works just like DateTime.

    // create a $dt object with the UTC timezone
    $dt_utc = new DateTimeImmutable('2016-12-12 12:12:12', new DateTimeZone('UTC'));
    
    // Create a new instance with the new timezone
    $dt_denver = $dt_utc->setTimezone(new DateTimeZone('America/Denver'));
    
    // format the datetime
    $dt_denver->format('Y-m-d H:i:s T');
    

    Immutability allows you to use chaining multiple times without changing the value of $dt

    $dt = new DateTimeImmutable('2016-12-12 12:12:12', new DateTimeZone('UTC'));
    
    // Format $dt in Denver timezone
    echo $dt->setTimezone(new DateTimeZone('America/Denver'))->format('Y-m-d H:i:s T');
    
    // Format $dt in Madrid timezone
    echo $dt->setTimezone(new DateTimeZone('Europe/Madrid'))->format('Y-m-d H:i:s T');
    
    // Format $dt in Local server timezone
    echo $dt->setTimezone((new DateTime())->getTimezone())->format('Y-m-d H:i:s T');
    

    Notes

    time() returns the unix timestamp, which is a number, it has no timezone.

    date('Y-m-d H:i:s T') returns the date in the current locale timezone.

    gmdate('Y-m-d H:i:s T') returns the date in UTC

    date_default_timezone_set() changes the current locale timezone

    to change a time in a timezone

    // create a $dt object with the America/Denver timezone
    $dt = new DateTime('2016-12-12 12:12:12', new DateTimeZone('America/Denver'));
    
    // change the timezone of the object without changing it's time
    $dt->setTimezone(new DateTimeZone('UTC'));
    
    // format the datetime
    $dt->format('Y-m-d H:i:s T');
    

    here you can see all the available timezones

    https://en.wikipedia.org/wiki/List_of_tz_database_time_zones

    here are all the formatting options

    http://php.net/manual/en/function.date.php

    Update PHP timezone DB (in linux)

    sudo pecl install timezonedb
    

    Because of daylight savings, some dates repeat in some timezones, for example, in the United States, March 13, 2011 2:15am never occurred, while November 6, 2011 1:15am occurred twice. These datetimes can't be accurately determined.

    Mình không nói nhiều về  tầm quan trọng của việc sử dụng thời gian trong PHP, nó là điều bắt buộc rồi, liên quan đến quản lý cơ sở dữ liệu nữa. Trong bài này chỉ là giới thiệu các hàm liên quan đến thời gian trong PHP và cách sử dụng chúng:

    1) date_default_timezone_set(“Asia/Ho_Chi_Minh”); xác định múi giờ cho khu vực, mình đang ở Châu Á và ở Việt Nam- Hồ Chí Minh nên sẽ có timezone là Asia/Ho_Chi_Minh, mỗi khu vực sẽ chênh lệch nhau thời gian nên các bạn phải chú ý khi website có liên quan đến nước ngoài.

    Ví dụ:

    date_default_timezone_set("Asia/Ho_Chi_Minh");
    echo "VietNam: ".date("Y-m-d H:i:s"). "
    "; date_default_timezone_set("Asia/Tokyo"); echo "Japan: ".date("Y-m-d H:i:s"); //Kết quả: VietNam: 2016-07-18 17:36:49 Japan: 2016-07-18 19:36:49

    Như ta thấy trên với timezone là Việt Nam chúng ta sẽ có thời gian chậm hơn Nhật Bản là 2 giờ:

    Về múi giờ các bạn có thể tham khảo thêm tại: http://php.net/manual/en/timezones.php

    Định nghĩa: timestamp là một số nguyên biểu thị cho số giây tính từ thởi điểm UNIX Epoch ( 0h0p0s 1-1-1970)cho đến thời điểm hiện tại(số này chính là số giây)

    2) time():  là cách đơn giản nhất để lấy thông tin về ngày giờ hiện tại. Nó không có tham số và trả ra kiểu timestamp

    Ví dụ: Lấy ngày giờ hiện tại là

    //trả ra có dạng như 
    
    echo time(),'
    '; //thời điểm hiện tại cộng thêm 5 phút là 1468839621 $after_5_min = time() + 5*60; echo '+ 5 min: ',$after_5_min,'
    '; //Kết quả: + 5 min:1468839621

    3) checkdate(int $month, int $day, int $year) : kiểm tra tính hợp lệ của một chuỗi ngày tháng năm với (PHP 4, PHP 5, PHP 7) trả về true nếu chuỗi hợp lệ, còn false là không hợp lệ

    var_dump(checkdate(12, 31, 2015));
    
    var_dump(checkdate(2, 29, 2015));
    
    //kết quả
    
    bool true
    
    bool false
    
    

    4) date ( string $format [, int $timestamp = time() ] ): trả ra chuỗi theo định dạng mà chúng ta chỉ định trong $format, có thể chạy tốt trên (PHP 4, PHP 5, PHP 7)

    • format: định  dạng ngày tháng năm, giờ phút giây
    • timestamp(không bắt buộc) mặc định là hàm time()

    Ví dụ:

    echo date("Y-m-d"),'
    '; //kết quả trả ra có dạng như 2016-07-19 echo date("d-m-Y"),'
    '; //kết quả trả ra có dạng như 19-07-2016 echo date("d-m-Y H:i:s"),'
    '; //kết quả trả ra có dạng như 19-07-2016 10:25:31

    Chúng ta có thể sử dụng các ký tự để ngăn cách ngày tháng năm…như là “/” hoặc “:” hoặc “-” hoặc ” ”
    5) mktime(): tạo ra một timestamp từ ngày giờ cụ thể, chạy tốt trên (PHP 4, PHP 5, PHP 7)

    mktime ([ int $hour = date(“H”) [, int $minute = date(“i”) [, int $second = date(“s”) [, int $month = date(“n”) [, int $day = date(“j”) [, int $year = date(“Y”) [, int $is_dst = -1 ]]]]]]] )

    Ví dụ: chúng ta thử  tạo một timestamp từ 7h 30m 02s  18-05-2016

    //7h 30m 02s 18-05-2016
    
    $time = mktime(7,30,2,5,18,2016);
    
    //$time là timestamp, sử dụng nó trong hàm date()
    
    echo date("Y-m-d H:i:s",$time),'
    '; //công thêm 5 phút $time += 5*60; echo '5 min after: ',date("Y-m-d H:i:s",$time),'
    '; // và công thêm 1 ngày echo ' 1 date after: ',date("Y-m-d H:i:s",($time+1*60*60*24));   //kết quả sẽ là 2016-05-18 07:30:02 5 min after: 2016-05-18 07:35:02 1 date after: 2016-05-19 07:35:02

    6) strtotime(): tạo ra timestamp từ một chuỗi, trường hợp này được sử dụng nhiều khi lấy dữ liệu từ MySQL với định dạng là datetime(PHP 4, PHP 5, PHP 7)

    $time = strtotime("2016-10-21 10:11:10");
    echo date("Y-m-d h:i:s",$time)."
    "; echo "5 min after: ".date("Y-m-d h:i:s",$time+ 5*60); //kết quả 2016-10-21 10:11:10 5 min after: 2016-10-21 10:16:10

    Có thể sử dụng hàm này để cộng thời gian như các ví dụ sau:

    //thời gian hiện tại
    echo date("Y-m-d H:i:s"). "
    "; //cộng 1 ngày echo date("Y-m-d H:i:s", strtotime("+1 day")) . "
    "; //cộng 1 tuần echo date("Y-m-d H:i:s", strtotime("+1 week")). "
    "; //đến thứ 4 tiếp theo echo date("Y-m-d H:i:s", strtotime("next Wednesday")). "
    "; //thứ 2 vừa qua echo date("Y-m-d H:i:s", strtotime("last Monday"));

    7) getdate(): Lấy thông tin ngày giờ dạng mảng(PHP 4, PHP 5, PHP 7)

    getdate ([ int $timestamp = time() ] ): với các khóa như sau

    KhóaGiá trịví dụ
    “seconds” số giây 0 đến 59
    “minutes” số phút 0 đến 59
    “hours” số giờ 0 đến 23
    “mday” Ngày trong tháng 1 đến 31
    “wday” Ngày trong tuần 0 (Sunday) đến 6 (Saturday)
    “mon” Tháng 1 đến 12
    “year” Năm 1999
    “yday” Ngày của năm 0 đến 365
    “weekday” Ngày trong tuần(dạng chữ) Sunday đến Saturday
    “month” Tháng(dạng chữ) January đến December
    0 time() timestamp,-2147483648 đến 2147483647.

    Chúng ta prin_r hàm này sẽ thấy đươc khóa và giá trị

    echo "
    ";
    $today = getdate();
    print_r($today);
    echo "
    "; //Kết quả Array ( [seconds] => 57 [minutes] => 48 [hours] => 14 [mday] => 19 [wday] => 2 [mon] => 7 [year] => 2016 [yday] => 200 [weekday] => Tuesday [month] => July [0] => 1468914537 )

    Còn tiếp….

    Tổng hợp các ký tự tắt về định dạng ngày tháng năm, thời gian:

    Time:

    Ký tự GIẢI THÍCH Ví dụ
    a buổi sáng và chiều, chữ thường am hoặc pm
    A buổi sáng và chiều, chữ HOA AM hoặc PM
    g Giờ theo kiểu 12 tiếng/ngày, không có số không với các số từ 1 → 9 1 → 12
    G Giờ theo kiểu 24 tiếng/ngày, không có số không với các số từ 1 -> 9 1 → 23
    h Giờ theo kiểu 12 tiếng/ngày, có số không với các số từ 1 → 9 01 → 12
    H Giờ theo kiểu 24 tiếng/ngày, có số không với các số từ 1 → 9 01 → 23
    i Phút 00 → 59
    s Giây 00 → 59

    Day:

    Ký tự GIẢI THÍCH Ví dụ
    d Ngày trong tháng, có kí tự 0 cho các ngày từ 1 → 9 01 đến 31
    D Tên viết tắt của các thứ trong tuần Mon, Tue, Web, Thu, Fri, Sat, Sun
    j Ngày trong tháng, không có kí tự 0 cho các ngày từ 1 → 9 1 đến 31
    l Tên đầy đủ các thứ trong tuần Monday đến Sunday
    w Số thứ tự của ngày trong tuần, bắt đầu đếm từ Sunday là ngày 0 Từ 0 → 6 (Sun → Sat)
    z Số thứ tự của ngày trong năm Từ 0 → 365

    Week: (W) tuần thứ mấy trong năm kiểu số

    Month:

    Ký tự GIẢI THÍCH Ví dụ
    F Tên đầy đủ của tháng January → December
    m Số thứ tự của tháng, có số 0 với các số từ 1 → 9 01 → 12
    M Tên viết tắt của tháng Jan → Dec
    sn Số thứ tự của tháng, không có số 0 với các số từ 1 → 9 1 → 12
    t Số ngày trong 1 tháng 28 → 31

    Year:

    Ký tự GIẢI THÍCH Ví dụ
    Y Năm có 4 ký số 2014, 2015
    y Năm có 2 ký số 14, 15

    => Còn rất nhiều hàm khác nữa, mình sẽ tiếp tục cập nhật thêm…

    [thongbao]

    1. Nếu có thắc mắc gì các bạn để lại comment bên dưới mình sẽ trả lời sớm nhất có thể.
    2. Cảm ơn các bạn đã đọc.

    [/thongbao]

    Tagged on: PHP