2009-03-17 61 views
20

Cho một ngày nhất định, cách dễ nhất để xác định số ngày cho đến ngày đó (bằng PHP) là bao nhiêu? Tôi đang cố gắng xây dựng một tiện ích đếm ngược, Cảm ơn!Bao nhiêu ngày cho đến ngày X-Y-Z?

Trả lời

45
<?php 
$cdate = mktime(0, 0, 0, 12, 31, 2009, 0); 
$today = time(); 
$difference = $cdate - $today; 
if ($difference < 0) { $difference = 0; } 
echo "There are ". floor($difference/60/60/24)." days remaining"; 
?> 
+1

cảm ơn cho điều này! Giải quyết vấn đề của tôi :) – yanike

+1

Điều này thực sự phụ thuộc vào định nghĩa của bạn "ngày cho đến". Ví dụ: đoạn mã này cho tôi biết năm mới trước đó là 34 ngày nữa, và wolfram alpha, google, siri và mọi trang web tôi tìm kiếm đều nói với tôi 35 ngày. FWIW – AlBeebe

+0

@AlBeebe sau đó chỉ cần thêm +1. Có gì khó khăn về điều đó? – Devfly

8

Không coi ngày là số nguyên. Sử dụng cơ sở dữ liệu của bạn, có hỗ trợ tốt để xử lý lịch/thời gian.

select datediff("2009-11-12", now()) 
+2

unix timestamp FTW – andufo

22

Mở rộng về câu trả lời schnaader của, đây là một chức năng one-liner mà phải mất một chuỗi ngày như một tham số nhưng chỉ trả về số ngày:

<?php 
function days_until($date){ 
    return (isset($date)) ? floor((strtotime($date) - time())/60/60/24) : FALSE; 
} 
?> 
+0

Cảm ơn! Điều này đã giúp tôi rất nhiều và làm việc một điều trị để có được số ngày từ một ngày. –

+0

Cảm ơn! Tôi đã tìm kiếm một trong đó cung cấp cho tiêu cực, điều này đã giúp rất nhiều! – pattyd

+1

Vì lý do nào đó hôm qua là -2 ..... chuyện gì đã xảy ra? – pattyd

7

Ngày phút và giây định dạng:

// current time 
$today = new DateTime(format_date(time(), 'custom', 'd M Y H:i:s')); 
// date to which we want to compare (A Drupal field in my case). 
$appt = new DateTime(format_date($yourdate_is_timestamp, 'custom', 'd M Y H:i:s')); 

// Months 
$months_until_appt = $appt->diff($today)-> m; 
// days 
$days_until_appt = $appt->diff($today)-> days; 
// hours 
$hours_until_appt = $appt->diff($today)-> h; 
// minutes 
$minutes_until_appt = $appt->diff($today)-> i; 
// seconds 
$seconds_until_appt = $appt->diff($today)-> s; 

echo 'days until: ' . $days_until_appt; 
echo 'hours until: ' . $hours_until_appt; 
echo 'minutes until: ' . $minutes_until_appt; 
echo 'seconds until: ' . $seconds_until_appt; 
+0

'Lớp DateTime' FTW –

+0

Theo http://php.net/manual/en/ref.datetime.php' -> days' (ví dụ) không phải là một lớp hợp lệ phương pháp. Bạn có thể sửa đổi mã của bạn để sử dụng định dạng '-> ('d')', '-> ('m')', v.v. vì vậy nó rõ ràng hơn cho những người truy cập? – Wes

+0

Đối với hồ sơ - Tôi đã cập nhật để sử dụng 'DateTime' - không thể tin câu trả lời được chấp nhận bằng cách sử dụng' DateTime' được sử dụng trong giải pháp. – Wes

-1

Tôi vừa xem xét điều này trong mã của tôi cho một ứng dụng trực tiếp nơi hệ thống không chính xác xem hôm nay và ngày mai như hôm nay. Chúng tôi vừa đi vào Thời gian mùa hè của Anh và điều này đã gây ra sự cố với ứng dụng của chúng tôi.

Tôi bây giờ sử dụng sau đây, mà là đem lại cho tôi kết quả chính xác:

function days_away_to($dt) { 
    $mkt_diff = strtotime($dt) - time(); 
    return floor($mkt_diff/60/60/24) + 1; # 0 = today, -1 = yesterday, 1 = tomorrow 
} 

Tất nhiên, sử dụng lớp DateTime là giải pháp tốt nhất đi về phía trước ...

+1

Đây chính xác là mã giống như [đã được đăng ở đây] (http://stackoverflow.com/a/8807610/447356) và bạn chỉ cần thay đổi tên biến. -1 cho cố gắng để có được đại diện cho công việc của người khác và lãng phí thời gian của chúng tôi. –

+0

Cảm ơn SW nhưng tiếc là giải pháp đó không hiệu quả đối với tôi: nó cho tôi 0 cho 2014-03-31 nói với tôi rằng đó là ngày hôm nay (hôm nay là 30 tháng 3 ở Anh).Tôi đã thêm +1, sửa lỗi đó cho tôi. –

+0

Vì vậy, bạn nên làm nổi bật điều này trong bài đăng của mình bằng cách liên kết với câu trả lời khác và giải thích rằng bạn vừa thêm 1 để làm cho nó hoạt động. Vui lòng chỉnh sửa và cho tôi biết. –

Các vấn đề liên quan