2012-07-08 28 views
42

Tôi hiện đang có php có được thời gian hiện tại/ngày như vậy:Add 'x' số giờ cho đến nay

$now = date("Y-m-d H:m:s"); 

id gì muốn làm là có một mới biến $new_time bằng $now + $hours. $hours là số giờ khác nhau, từ 24-800.

Mọi đề xuất?

+0

strtotime() http://php.net/manual/en/function.strtotime.php –

+2

tôi nghi ngờ nếu đó là những gì bạn muốn. Tôi muốn bạn chú ý rằng "m" trong "H: m: s" biểu thị tháng trên chữ số. Tôi tin rằng bạn muốn viết "H: i: s". Hãy kiểm tra chéo – Paullo

Trả lời

75

Bạn có thể sử dụng chức năng strtotime() để thêm thứ gì đó vào dấu thời gian hiện tại. $new_time = date("Y-m-d H:i:s", strtotime('+5 hours')).

Nếu bạn cần biến trong hàm, bạn phải sử dụng dấu ngoặc kép sau đó như strtotime("+{$hours} hours"), tuy nhiên tốt hơn bạn nên sử dụng strtotime(sprintf("+%d hours", $hours)) sau đó.

+0

Điều đó có hiệu quả, nhưng nếu tôi thay thế '5' bằng một biến, nó không hoạt động đúng cách. 'strtotime ('+ $ giờ giờ')' –

+0

Tôi đã cập nhật câu trả lời sẽ giúp bạn. – fdomig

+0

Bạn không có nghĩa là $ new_time = date ("Y-m-d H: i: s", strtotime ('+ 5 giờ')? M là tháng, tôi là phút ... – richard

16

Bạn có thể sử dụng strtotime() để đạt được điều này:

$new_time = date("Y-m-d H:i:s", strtotime('+3 hours', $now)); // $now + 3 hours 
+1

Có những câu trả lời nào bằng cách sử dụng m trong vài phút ??? – richard

+0

@RichardDesLonde Có lẽ vì mọi người đã sao chép ví dụ mã của OP. :-) – Zar

3

Bạn cũng có thể sử dụng thời gian theo phong cách unix để tính toán:

$newtime = time() + ($hours * 60 * 60); // hours; 60 mins; 60secs 
echo 'Now:  '. date('Y-m-d') ."\n"; 
echo 'Next Week: '. date('Y-m-d', $newtime) ."\n"; 
+0

ý tưởng tồi, vấn đề với năm nhuận, giây nhảy vọt, thời gian tiết kiệm ánh sáng ban ngày, v.v. –

+0

@ Không, nó sẽ tính toán đúng cách. – casraf

+0

Năm nhuận được sử dụng phương pháp này, tiết kiệm ánh sáng ban ngày có thể được đặt trong khi sử dụng lại ngày – Ankit

4

Um ... phút của bạn nên được sửa chữa ... ' i 'là trong vài phút. Không phải tháng. :) (tôi đã có cùng một vấn đề cho một cái gì đó quá

$now = date("Y-m-d H:i:s"); 
$new_time = date("Y-m-d H:i:s", strtotime('+3 hours', $now)); // $now + 3 hours 
22

Một giải pháp khác (hướng đối tượng) là sử dụng DateTime :: thêm

Ví dụ:..

$now = new DateTime(); //current date/time 
$now->add(new DateInterval("PT{$hours}H")); 
$new_time = $now->format('Y-m-d H:i:s'); 

PHP documentation

+3

Nhỏ tyop ở đây, $ date-> format có thể là $ now-> format – Patrick

0

Tôi sử dụng chức năng sau đây để chuyển đổi giá trị ngày giờ bình thường sang định dạng ngày giờ của tôi sang định dạng ngày giờ của tôi.

private function ampmtosql($ampmdate) { 
      if($ampmdate == '') 
       return ''; 
      $ampm = substr(trim(($ampmdate)), -2); 
      $datetimesql = substr(trim(($ampmdate)), 0, -3); 
      if ($ampm == 'pm') { 
       $hours = substr(trim($datetimesql), -5, 2); 
       if($hours != '12') 
        $datetimesql = date('Y-m-d H:i',strtotime('+12 hour',strtotime($datetimesql))); 
      } 
      elseif ($ampm == 'am') { 
       $hours = substr(trim($datetimesql), -5, 2); 
       if($hours == '12') 
        $datetimesql = date('Y-m-d H:i',strtotime('-12 hour',strtotime($datetimesql))); 
      } 
      return $datetimesql; 
     } 

Nó chuyển đổi các giá trị datetime như,

2015-06-04 09:55 AM -> 2015-06-04 09:55 
2015-06-04 03:55 PM -> 2015-06-04 15:55 
2015-06-04 12:30 AM -> 2015-06-04 00:55 

Hy vọng điều này sẽ giúp một ai đó.

2

Bạn có thể thử lib Ouzo goodies, và làm điều này theo cách thông thạo:

echo Clock::now()->plusHours($hours)->format("Y-m-d H:m:s"); 

API cho phép nhiều hoạt động.

6

Đúng

Bạn có thể sử dụng strtotime() để đạt được điều này:

$new_time = date("Y-m-d H:i:s", strtotime('+3 hours', strtotime($now))); // $now + 3 hours 
Các vấn đề liên quan