2010-09-06 1 views
14

Nếu tôi có một vài chuỗi $ startDate và $ endDate được đặt thành (ví dụ) "2011/07/01" và "2011/07/17" (nghĩa là ngày 1 tháng 7 năm 2011 và ngày 17 tháng 7 năm 2011). Làm cách nào để đếm số ngày từ ngày bắt đầu đến ngày kết thúc? Trong ví dụ được đưa ra, nó sẽ là 17 ngày.Cách đếm ngày giữa hai ngày trong PHP?

+0

thấy http://stackoverflow.com/questions/2040560/finding-the-number-of-days-between-hai-date –

Trả lời

34

Dưới đây là cách thô để làm điều đó

$startTimeStamp = strtotime("2011/07/01"); 
$endTimeStamp = strtotime("2011/07/17"); 

$timeDiff = abs($endTimeStamp - $startTimeStamp); 

$numberDays = $timeDiff/86400; // 86400 seconds in one day 

// and you might want to convert to integer 
$numberDays = intval($numberDays); 
+4

Sẽ không hoạt động chính xác khi bạn có ngày địa phương bao gồm chuyển đổi tiết kiệm thời gian trong ngày, bởi vì vào những ngày bạn có ngày với 23 hoặc 25 giờ. –

+0

Cảm ơn.Xuất hiện để làm việc cho tôi. – cannyboy

+0

Trên thực tế, nó nói 16 ngày cho những ngày đó .. Tôi có cần phải làm cho ngày bỏ qua thời gian tiết kiệm ánh sáng ban ngày ..? – cannyboy

3

PHP có hàm date_diff() để thực hiện việc này.

30

Use DateTime::diff (aka date_diff):

$datetime1 = new DateTime('2009-10-11'); 
$datetime2 = new DateTime('2009-10-13'); 
$interval = $datetime1->diff($datetime2); 

Hoặc:

$datetime1 = date_create('2009-10-11'); 
$datetime2 = date_create('2009-10-13'); 
$interval = date_diff($datetime1, $datetime2); 

Sau đó bạn có thể nhận được khoảng như một số nguyên bằng cách gọi $interval->days.

+0

Điều đó dường như không hoạt động với các chuỗi ban đầu của tôi là "2011/07/01" và "2011/07/17" ... " undefined function date_diff() .. ". Tôi đang sử dụng PHP 5.2.10 – cannyboy

+4

Mỗi tài liệu (được liên kết ở trên cùng), đây là PHP> = 5.3.0. Trong lần tiếp theo, vui lòng bao gồm phiên bản PHP trong câu hỏi của bạn. – wuputah

+0

chỉ hoạt động nếu bạn không có thời gian trong Thời gian ngày của bạn nếu không nó có thể trở lại 1-2 ngày đến vài lỗi – Dukeatcoding

1

Không ai trong số các giải pháp làm việc cho tôi. Đối với những người vẫn còn trên PHP 5.2 (DateTime :: diff đã được giới thiệu trong 5,3), giải pháp này hoạt động:

function howDays($from, $to) { 
    $first_date = strtotime($from); 
    $second_date = strtotime($to); 
    $offset = $second_date-$first_date; 
    return floor($offset/60/60/24); 
} 
3

Trong trường hợp của bạn có DateTime cũng giờ: phút: giây và bạn vẫn muốn có số ngày ..

/** 
    * Returns the total number of days between to DateTimes, 
    * if it is within the same year 
    * @param $start 
    * @param $end 
    */ 
    public function dateTimesToDays($start,$end){ 
     return intval($end->format('z')) - intval($start->format('z')) + 1; 
    } 

https://github.com/dukeatcoding/timespan-converter

0

Nếu bạn muốn biết số ngày (nếu có), số giờ (nếu có), minutues (nếu có) và giây, bạn có thể làm như sau:

$previousTimeStamp = strtotime("2011/07/01 21:12:34"); 
$lastTimeStamp = strtotime("2013/09/17 12:34:11"); 

$menos=$lastTimeStamp-$previousTimeStamp; 

$mins=$menos/60; 
if($mins<1){ 
$showing= $menos . " seconds ago"; 
} 
else{ 
$minsfinal=floor($mins); 
$secondsfinal=$menos-($minsfinal*60); 
$hours=$minsfinal/60; 
if($hours<1){ 
$showing= $minsfinal . " minutes and " . $secondsfinal. " seconds ago"; 

} 
else{ 
$hoursfinal=floor($hours); 
$minssuperfinal=$minsfinal-($hoursfinal*60); 
$days=$hoursfinal/24; 
if($days<1){ 
$showing= $hoursfinal . "hours, " . $minssuperfinal . " minutes and " . $secondsfinal. " seconds ago"; 

} 
else{ 
$daysfinal=floor($days); 
$hourssuperfinal=$hoursfinal-($daysfinal*24); 
$showing= $daysfinal. "days, " .$hourssuperfinal . " hours, " . $minssuperfinal . " minutes and " . $secondsfinal. " seconds ago"; 
}}} 

echo $showing; 

Bạn có thể sử dụng cùng một logic nếu bạn muốn thêm tháng và năm.

0

Cách đơn giản để đếm là,

$currentdate = date('Y-m-d H:i:s'); 
$after1yrdate = date("Y-m-d H:i:s", strtotime("+1 year", strtotime($data))); 

$diff = (strtotime($after1yrdate) - strtotime($currentdate))/(60 * 60 * 24); 

echo "<p style='color:red'>The difference is ".round($diff)." Days</p>"; 
-1

Bạn có thể sử dụng date_diff để tính toán sự khác biệt giữa hai thời điểm:

$date1 = date_create("2013-03-15"); 
$date2 = date_create("2013-12-12"); 
$diff = date_diff($date1 , $date2); 
echo $diff->format("%R%a days"); 
0
$date1 = date_create("2017-04-15"); 
$date2 = date_create("2017-05-18"); 

//difference between two dates 
$diff = date_diff($date1,$date2); 

//count days 
echo 'Days Count - '.$diff->format("%a");