Hướng dẫn dùng utcdatetime trong PHP

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.

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.

  • Blog
  • Tin tức

26/07/2021 03:01

Ngày tháng là một phần của cuộc sống hàng ngày, do vậy việc xử lý ngày tháng cực kỳ quan trọng khi bạn xử lý các bài viết và đăng tải lên website. Với PHP, ngôn ngữ lập trình này cung cấp các công cụ mạnh mẽ để tính toán ngày tháng giúp cho việc thao tác ngày tháng trở nên dễ dàng hơn. Trong bài viết này, cùng T3H tìm hiểu về Date, Time trong PHP.

Định dạng ngày tháng trong PHP với hàm date () - Date time trong PHP

Hàm date dùng để chuyển đổi thời gian theo format mà lập trình viên chỉ định mong muốn.

Cú pháp: date(format, timestamp);

Trong đó:

  • 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() (chính là thời gian hiện tại).

Chuyển đổi Timestamp với hàm getdate()

Hàm getdate () tùy ý chấp nhận một timestamp và trả về một mảng liên kết chứa thông tin về ngày tháng. Nếu bạn bỏ qua Time Stamp, nó sẽ hoạt động với thời gian thực được trả về theo hàm date().

Bảng sau liệt kê các phần tử có trong mảng được trả về bởi getdate ().

STT

Mô tả

Ví dụ

1

seconds

20

2

minutes

29

3

hours

22

4

mdays

11

5

wday

4

6

mon

7

7

year

1997

8

yday

19

9

weekday

Thursday

10

month

January

11

0

948370048

Bây giờ bạn có toàn quyền kiểm soát ngày và giờ. Bạn có thể định dạng ngày và giờ này ở bất kỳ định dạng nào bạn muốn.

Ví dụ:

<?php

   $date_array = getdate();

   

   foreach ( $date_array as $key => $val ){

      print "$key = $val<br />";

   }

   $formated_date  = "Today's date: ";

   $formated_date .= $date_array['mday'] . "/";

   $formated_date .= $date_array['mon'] . "/";

   $formated_date .= $date_array['year'];

   

   print $formated_date;

?>

Output

seconds = 10

minutes = 29

hours = 9

mday = 5

wday = 1

mon = 12

year = 2016

yday = 339

weekday = Monday

month = December

0 = 1480930150

Today's date: 5/12/2016

>>> Đọc thêm: Hằng số trong PHP - Tìm hiểu nhanh về hằng số trong PHP

Chuyển đổi Timestamp với hàm date() - Date time trong PHP

Hàm date () trả về một chuỗi được định dạng biểu thị một ngày. Bạn có thể thực hiện một lượng lớn quyền kiểm soát đối với định dạng mà date () trả về với một đối số chuỗi mà bạn phải chuyển cho nó.

date(format,timestamp)

Date() tùy chọn chấp nhận một dấu thời gian nếu bị bỏ qua thì ngày và giờ hiện tại sẽ được sử dụng. Bất kỳ dữ liệu nào khác mà bạn đưa vào chuỗi định dạng được chuyển đến date () sẽ được bao gồm trong giá trị trả về.

Bảng sau liệt kê các mã mà một chuỗi định dạng có thể chứa:

STT

Mô tả

Ví dụ

1

a

‘am’ hoặc ‘pm’ viết thường

om

2

A

‘AM’ hoặc ‘PM’ viết hoa

PM

3

d

Ngày trong tháng

20

4

D

ngày trong tuần

Thu

5

F

Tên tháng

Tháng Giêng

6

h

Trả về giờ trong ngày kiểu 12h

12

7

Trả về giờ trong ngày kiểu 24h

22

8

g

22

9

G

12

10

i

22

11

Trả về ngày trong tháng, nhưng nếu ngày<10 sẽ không hiển thị số 0.

23

12

l

Trả về đầy đủ thứ trong tuần (tiếng anh)

Thursday

13

L

1

14

m

Trả về tháng trong năm (bằng số từ 1 đến 12).

1

15

M

Trả về tháng trong năm nhưng bằng tiếng anh viết tắt.

Jan

16

r

Ngày được định dạng

Thu, 21 Dec 2000 16:01:07 +0200

17

n

Tháng trong năm

2

18

s

Trả về số giây trong phút.

20

19

U

Time stamp

948372444

20

y

 Trả về 2 số cuối cùng của năm.

06

21

Y

trả về đầy đủ 4 số của năm.

2006

22

z

Ngày trong năm (từ 0-365)

206

23

Z

trả về số ngày trong năm (Ngày trong năm bắt đầu từ 0 -> 365)

+5

Ví dụ:

<?php

   print date("m/d/y G.i:s<br>", time());

   echo "<br>";

   print "Today is ";

   print date("j of F Y, \a\\t g.i a", time());

?>

Kết quả nhận được:

12/05/16 9:29:47

Today is 5 2016f December 2016 at 9:29 am

>>> Tham khảo: Khóa học lập trình PHP

Kết luận: Bài viết trên đã chỉ ra một số phương pháp để xử lý ngày tháng, Date Time trong PHP, tùy vào từng trường hợp, bạn có thể áp dụng để xử lý ngày tháng một cách khác nhau. Hy vọng bài viết trên hữu ích với bạn. Tìm hiểu thêm về PHP và các ngôn ngữ lập trình khác qua các khóa học lập trình tại Viện công nghệ thông tin T3H bạn nhé!