2009-06-25 74 views
6

Tôi đang cố gắng thực hiện một chút toán học bằng cách sử dụng các ngày trong PHP. Tôi đang sửa đổi shoutbox và tôi muốn triển khai chức năng sau.Câu hỏi về PHP Ngày


Nếu bài date = ngày hôm nay, trở lại thời điểm bài

else if date = ngày hôm qua, trở lại "ngày hôm qua"

ngày khác = X days ago


Làm thế nào sẽ Tôi sử dụng các hàm ngày tháng của php để tính toán số ngày trước một dấu thời gian (dấu thời gian được định dạng theo thời gian UNIX)

Trả lời

8

Hãy thử điều này:

$shoutDate = date('Y-m-d', $shoutTime); 
if ($shoutDate == date('Y-m-d')) 
    return date('H:i', $shoutTime); 

if ($shoutDate == date('Y-m-d', mktime(0, 0, 0, date('m'), date('d') - 1, date('Y')))) 
    return 'yesterday'; 

return gregoriantojd(date('m'), date('d'), date('y')) - gregoriantojd(date('m', $shoutTime), date('d', $shoutTime), date('y', $shoutTime)) . ' days ago'; 
+0

hoàn hảo. Cảm ơn nhiều –

3

Trong php 5.3.0 hoặc cao hơn, bạn có thể sử dụng DateTime::diff (aka date_diff()).

Trong hầu hết mọi php, bạn có thể chuyển đổi ngày thành dấu thời gian của Unix và chia chênh lệch giữa chúng thành 86400 (1 ngày tính bằng giây).

+0

Đừng quên rằng PHP 5.3 không phải là ra được nêu ra (tính đến tháng 2009) – Greg

0

Sử dụng DateTime lớp và sau đó bạn có một phương pháp diff.

0

Thử sử dụng date_parse.
Từ hướng dẫn:

<?php 
print_r(date_parse("2006-12-12 10:00:00.5")); 
?> 

Sẽ in

Array 
(
    [year] => 2006 
    [month] => 12 
    [day] => 12 
    [hour] => 10 
    [minute] => 0 
    [second] => 0 
    [fraction] => 0.5 
    [warning_count] => 0 
    [warnings] => Array() 
    [error_count] => 0 
    [errors] => Array() 
    [is_localtime] => 
) 
3

Sử dụng thực tế là thời gian được lưu trữ trong vài giây:

$days = floor(($shoutTime - time())/86400) + 1; // 86400 = 24*60*60 

switch ($days) { 
    case 0: 
    return date('H:i', $shoutTime); 
    case -1: 
    return 'yesterday'; 
    case 1: 
    return 'tomorrow'; 
} 

return "$days ago"; 
1

Tôi không nghĩ rằng nó được chỉ ra rằng bạn có thể sử dụng strtotime để nhận "Hôm qua". Nó làm cho nó nhiều hơn có thể đọc được (và dễ nhớ hơn) so với việc tính ngày "bằng tay" và có lẽ ít lỗi hơn.

$ int = strtotime ('Hôm qua');


if(date('Y-m-d', $shoutTime) == date('Y-m-d') { 
    return date('H:i:s', $shouTime); 
} elseif(date('Y-m-d', $shoutTime) == date('Y-m-d', strtotime('Yesterday')) { 
    return "Yesterday."; 
} else { 
    $days = floor($shoutTime - time()/86400); 
    return "$days ago."; 
}