1. Thiết lập thời gian ở Việt Nam

Đầu tiên để có thể có thời gian đúng theo múi giờ Việt Nam thì bắt buộc ta sẽ thiết lập time zone cho nó(múi giờ). Để thiết lập được time zone bằng hàm date_default_timezone_set()

Cú pháp:

date_default_timezone_set(‘tên time zone’);

Nếu thời gian bạn nhận từ mã không chính xác, có thể do máy chủ của bạn ở quốc gia khác hoặc được thiết lập cho múi giờ khác. Vì vậy nếu bạn cần thời gian chính xác cho một vị trí cụ thể, bạn có thể đặt vị trí cụ thể nhất cho nó.

Ví dụ:

<?php
date_default_timezone_set("America/New_York");
echo "The time is " . date("h:i:sa");
?>

Lệnh này sẽ ảnh hưởng tới tất cả các lệnh xử lý ngày tháng phía bên dưới nó nên để được chính xác nhất hãy đặt hàm này ở đầu file nhé!

Để xem danh sách timezone mà PHP hỗ trợ thì các bạn hãy sử dụng đoạn code sau:

<?php
foreach (timezone_abbreviations_list() as $abbr => $timezone) {
    foreach ($timezone as $val) {
        if (isset($val['timezone_id'])) {
            var_dump($abbr, $val['timezone_id']);
        }
    }
}
?>

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

Hàm date() dùng để chuyển đổi thời gian theo format mà lập trình viên mong muốn, hay nói cách khác là nó dùng để chuyển đổi thời gian thành các định dạng tùy chỉnh.

Cú pháp:

date(format, timestamp = ‘time()’);

Trong đó:

  • format: là định dạng thời gian mà ta muốn xuất ra, là định dạng mà hàm này sẽ trả về. Bắt buộc nhập
  • Timestamp: là thời gian ta truyền vào(int) nếu để trống trường này thì PHP sẽ tự động lấy thời gian hiện tại(chính là hàm time() )

Mình sẽ nói một số các format mà ta sẽ hay sử dụng nhé:

  • h : trả về giờ trong ngày kiểu 12h.
  • H : trả về giờ trong ngày kiểu 24h.
  • i : trả về phút trong giờ.
  • s : trả về số giây trong phút
  • d: trả về ngày trong tháng(từ 1- đến 31).
  • j: Trả về ngày trong tháng, nhưng nếu ngày<10 sẽ không hiển thị số 0.
  • D: Trả về định dạng thứ trogn tuần bằng tiếng anh viết tắt.
  • l: Trả về đầy đủ thứ trong tuần (tiếng anh).
  • m: Trả về tháng trong năm (từ 1 đến 12).
  • M: Trả về tháng trong năm nhưng bằng tiếng anh viết tắt.
  • y: Trả về 2 số cuối cùng của năm.
  • Y: trả về đầy đủ 4 số của năm.

Và còn nhiều format khác các bạn có thể tham khảo tại: php.net

Các ký tự như “/” “.” hoặc “-“ cũng có thể được chèn vào giữa các ký tự để thêm định dạng bổ sung.

Ví dụ: lấy ngày tháng năm hiện tại:

<?php    
   echo "Today is " . date("d/m/Y") . "<br>";    
   echo "Today is " . date("d.m.Y") . "<br>";    
   echo "Today is " . date("d-m-Y") . "<br>";    
   echo "Today is " . date("l");  
   "<br>";
   echo date('d-m-Y H:i:s');  
?>

Các bạn hãy chạy để ra ngày học khóa học này nhé!

Lưu ý

Bạn có thể sử dụng hàm date() của PHP để tự động cập nhật thời hạn bản quyền trên trang web của mình, như:

Copyright @ 2002-<?php echo date(“Y”)?>

3. Một số hàm xử lý khác trong PHP

3.1. Truyền chuỗi vào định dạng format

Để truyền nội dung chuỗi mà ta muốn hiển thị như mong muốn thì ta phải thêm dấu \ vào trước các ký tự đặc biệt trong chuỗi. Điều này giúp chuỗi không trùng với format của key của PHP.

Ví dụ:

echo date('Bây giờ là H giờ');
echo date('\B\â\y \g\i\ờ \l\à H \g\i\ờ');

3.2. Chuyển đổi thời gian sang kiểu INT

Để chuyển đổi thời gian sang kiểu INT thì ta sử dụng hàm strtotime($time). Hàm này giúp ta chuyển đổi chuỗi ngày có thể đọc được của con người thành thời gian Unix(số giây kể từ ngày 1 tháng 1 năm 1970 00:00:00 GMT).

Cú pháp:

strtotime(time, now);

Ví dụ:

echo strtotime(date('Y-m-d H:i:s'));

Sử dụng hàm date() để định dạng ngày giờ từ hàm được tạo:

<?php
   $d = strtotime("10:30pm May 04 2020");
   echo "Created date is " . date("Y-m-d h:i:sa", $d);
?>

PHP khá thông minh về việc chuyển đổi một chuỗi thành một ngày, vì vậy bạn có thể đặt các giá trị khác nhau.

<?php
   $d = strtotime("tomorrow");
   echo date("Y-m-d h:i:sa", $d) . "<br>";
   $d = strtotime("next Saturday");
   echo date("Y-m-d h:i:sa", $d) . "<br>";
   $d = strtotime("+3 Months");
   echo date("Y-m-d h:i:sa", $d) . "<br>";
?>

Tuy nhiên, strtotime() không phải là hoàn hảo, vì vậy hãy nhớ kiểm tra các chuỗi bạn đặt vào đó.

3.3. Chuyển đổi kiểu thời gian

Để chuyển đổi kiểu thời gian ta dùng hàm date_format()

Ví dụ:

$date=date_create("2021-09-30");
echo date_format($date,"Y/m/d H:i:s");

3.4. Tính toán ngày tháng

Để tính toán đặc biệt là cộng trừ thêm ngày trong PHP chúng ta dùng hàm date_modify().

Ví dụ:

date_default_timezone_set('Asia/Ha_Noi');
$date=date_create("2017-09-30");
date_modify($date, "+11 days");
echo date_format($date, "Y-m-d");

3.5. Chuyển đổi ngày tháng về mảng

Để chuyển đổi dữ liệu ngày tháng về dạng mảng trong PHP các bạn sử dụng hàm get_date().

Ví dụ:

echo '<pre>';
print_r(getdate());
echo '</pre>';

3.6. Xử lý cộng trừ ngày tháng với hàm mktime()

Hàm mktime() được sử dụng để tạo dấu thời gian dựa trên ngày và giờ cụ thể. Tham số dấu thời gian tùy chọn trong hàm date() chỉ định một dấu thời gian. Nếu bỏ qua, ngày và giờ hiện tại sẽ được sử dụng

Hàm PHP mktime() trả về dấu thời gian Unix cho một ngày. Dấu thời gian Unix chứa số giây giữa Kỷ nguyên Unix (ngày 1 tháng 1 năm 1970 00:00:00 GMT) và thời gian được chỉ định.

Cú pháp:

mktime ($hour, $minute, $second, $month, $day , $year);

Lưu ý

  • Hàm này sẽ trả về thời gian kiểu INT nên bạn phải sử dụng hàm date() để chuyển đổi ra định dạng mong muốn.
  • Bạn có thể bỏ qua bao nhiêu đối số tùy thích và giá trị tương ứng với thời gian hiện tại sẽ được sử dụng thay thế. Nếu bạn bỏ qua tất cả các đối số, hàm mktime() sẽ trả về dấu thời gian UNIX tương ứng với ngày và giờ hiện tại, giống như time().

Ví dụ:

<?php
   $d = mktime(11, 14, 54, 05, 04, 2021);
   echo "Created date is " . date("Y-m-d h:i:sa", $d);
?>

Hàm mktime() cũng có thể được sử dụng để tìm tên ngày trong tuần tương ứng với một ngày cụ thể. Để thực hiện việc này, chỉ cần sử dụng ký tự ‘l’ (chữ thường ‘L’) với dấu thời gian của bạn, như trong ví dụ sau, hiển thị ngày rơi vào ngày 30 tháng 9 năm 2021:

<?php
echo date('l', mktime(0, 0, 0, 9, 30, 2021));
?>

Hàm mktime() cũng có thể được sử dụng để tìm một ngày cụ thể trong tương lai sau một khoảng thời gian cụ thể. Như trong ví dụ sau, ngày nào sẽ hiển thị ngày rơi sau 30 tháng kể từ ngày hiện tại:

<?php
// Hôm nay là 30 tháng 9 năm 2021
$futureDate = mktime(0, 0, 0, date("m")+30, date("d"), date("Y"));
echo date("d/m/Y", $futureDate);
?>

Hoặc có thể xem ngày mai, tháng tới, năm tới:

$tomorrow  = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));
$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));
$nextyear  = mktime(0, 0, 0, date("m"),   date("d"),   date("Y")+1);