10 đoạn code về thời gian (Dates) bằng PHP

Lấy thời gian hiện tại và định dạng

Đây là 1 hàm cơ bản trong PHP, không chứa tham số và trả về thời gian hiện tại.

function nowTime(){
	return date('d/m/Y', time());
}

Định dạng ngày tháng

Đây là cách đơn giản nhất để chuyển ngày tháng từ định dạng này (yyyy/mm/dd) sang định dạng khác (dd/mm/yyyy). Để chi tiết và rõ ràng hơn, bạn có thể tham khảo class DateTime để phân tích và định dạng.

$originalDate = "2020-06-03";
$newDate = date("d-m-Y", strtotime($originalDate));

Nguồn: Stack Overflow

Lấy số tuần từ ngày tháng

Trong lúc viết code php, đôi lúc bạn sẽ cần lấy số tuần của một ngày cụ thể. Hàm dưới đây sẽ giúp bạn lấy được số tuần bằng cách truyền ngày bạn muốn lấy dưới dạng tham số và sau đó nó sẽ trả về cho bạn số tuần.

function getWeekNumber($ddate){
	$date = new DateTime($ddate);
	return $date->format("W");
}

Chuyển đổi phút sang giờ và phút

Đây là một hàm php hữu ích để hiển thị thời gian: Truyền vào nó số phút dưới dạng số nguyên (giả sử là 135) và hàm sẽ trả về 02:15.

function convertToHoursMins($time, $format = '%02d:%02d') {
    if ($time < 1) {
        return;
    }
    $hours = floor($time / 60);
    $minutes = ($time % 60);
    return sprintf($format, $hours, $minutes);
}

Lấy khoảng thời gian giữa 2 ngày

Hàm này sẽ lấy ra khoảng thời gian giữa 2 ngày được truyền vào 2 tham số $date1$date2

function dateDiff($date1, $date2){
    	$datetime1 = new DateTime($date1);
	$datetime2 = new DateTime($date2);
	$interval = $datetime1->diff($datetime2);
	return $interval->format('%H:%I');
}

Kiểm tra ngày được chỉ định là quá khứ hay tương lai

if(strtotime(dateString) > time()) {
     # date is in the future
}

if(strtotime(dateString) < time()) {
     # date is in the past
}

if(strtotime(dateString) == time()) {
     # date is right now
}

Nguồn: Art of Web

Tính tuổi

Hàm này sẽ lấy ngày truyền vào tham số và trả về tuổi. Rất hữu ích nếu bạn cần kiểm tra độ tuổi nhất định để tạo tài khoản.

function age($date){
    $time = strtotime($date);
    if($time === false){
      return '';
    }
 
    $year_diff = '';
    $date = date('Y-m-d', $time);
    list($year,$month,$day) = explode('-',$date);
    $year_diff = date('Y') - $year;
    $month_diff = date('m') - $month;
    $day_diff = date('d') - $day;
    if ($day_diff < 0 || $month_diff < 0) $year_diff-;
 
    return $year_diff;
}

Nguồn: AP PHP

Hiển thị danh sách các ngày giữa 2 ngày

Một ví dụ về cách hiển thị danh sách ngày giữa hai ngày, sử dụng class DateTime()DatePeriod().

// Mandatory to set the default timezone to work with DateTime functions
date_default_timezone_set('America/Sao_Paulo');

$start_date = new DateTime('2010-10-01');
$end_date = new DateTime('2010-10-05');

$period = new DatePeriod(
	$start_date, // 1st PARAM: start date
	new DateInterval('P1D'), // 2nd PARAM: interval (1 day interval in this case)
	$end_date, // 3rd PARAM: end date
	DatePeriod::EXCLUDE_START_DATE // 4th PARAM (optional): self-explanatory
);


foreach($period as $date) {
	echo $date->format('Y-m-d').'<br/>'; // Display the dates in yyyy-mm-dd format
}

Nguồn: Snipplr

Hiển thị thời gian dưới dạng “time ago”

Hàm này sẽ giúp bạn hiển thị thời gian đẹp mắt hơn như là “1 giờ trước” (1 hour ago) hay “2 ngày trước” (2 days ago) giống các mạng xã hội hiện nay đang sử dụng.

function ago($tm,$rcs = 0) {
   $cur_tm = time(); $dif = $cur_tm-$tm;
   $pds = array('second','minute','hour','day','week','month','year','decade');
   $lngh = array(1,60,3600,86400,604800,2630880,31570560,315705600);
   for($v = sizeof($lngh)-1; ($v >= 0)&&(($no = $dif/$lngh[$v])<=1); $v--); if($v < 0) $v = 0; $_tm = $cur_tm-($dif%$lngh[$v]);

   $no = floor($no); if($no <> 1) $pds[$v] .='s'; $x=sprintf("%d %s ",$no,$pds[$v]);
   if(($rcs == 1)&&($v >= 1)&&(($cur_tm-$_tm) > 0)) $x .= time_ago($_tm);
   return $x;
}

Nguồn: CSS Tricks

Đếm ngược đến 1 ngày nào đó

Hàm php này sẽ lấy ngày được định sẵn và cho biết còn lại bao nhiêu ngày và giờ cho đến ngày này.

$dt_end = new DateTime('December 3, 2016 2:00 PM');
$remain = $dt_end->diff(new DateTime());
echo $remain->d . ' days and ' . $remain->h . ' hours';

Nguồn: Stack Overflow

Dịch từ CatsWhoCode