2013-07-18 45 views
21

Tôi có đoạn mã sau:làm thế nào để trừ 24 giờ từ đối tượng thời gian ngày trong PHP

$now = date("Y-m-d H:m:s"); 
    $date = date("Y-m-d H:m:s", strtotime('-24 hours', $now)); 

Tuy nhiên, bây giờ nó mang lại cho tôi lỗi này:

A non well formed numeric value encountered in... 

tại sao điều này?

+3

Xem hướng dẫn - 'strtotime' hy vọng một dấu thời gian như thứ hai giá trị. (Trong ví dụ của bạn, bạn chỉ có thể bỏ qua nó hoàn toàn) –

+2

Bạn có thể muốn biên giới tiết kiệm thời gian của ban lãnh sự: bạn có thực sự muốn có một swith từ 10 AM đến 11 AM (hoặc 9 AM?). –

+1

... có ai khác bắt được 'm' là nơi' i' thường nằm trong phần thời gian không?Mỗi một trong những câu trả lời được sao chép dán giám sát này. Ha. – mickmackusa

Trả lời

25

strtotime() hy vọng một dấu thời gian unix (đó là number seconds since Jan 01 1970)

$date = date("Y-m-d H:i:s", strtotime('-24 hours', time())); ////time() is default so you do not need to specify. 

tôi sẽ đề nghị sử dụng thư viện datetime mặc dù, vì đó là một cách tiếp cận hướng đối tượng hơn.

$date = new DateTime(); //date & time of right now. (Like time()) 
$date->sub(new DateInterval('P1D')); //subtract period of 1 day 

Ưu điểm của việc này là bạn có thể tái sử dụng các DateInterval:

$date = new DateTime(); //date & time of right now. (Like time()) 
$oneDayPeriod = new DateInterval('P1D'); //period of 1 day 
$date->sub($oneDayPeriod); 
$date->sub($oneDayPeriod); //2 days are subtracted. 
$date2 = new DateTime(); 
$date2->sub($oneDayPeriod); //can use the same period, multiple times. 
36
$date = (new \DateTime())->modify('-24 hours'); 

hoặc

$date = (new \DateTime())->modify('-1 day'); 

(Sau đó sẽ đưa vào tài khoản this comment vì nó là một điểm hợp lệ .)

Nên làm việc tốt cho bạn ở đây. Xem http://PHP.net/datetime

$ date sẽ là phiên bản DateTime, đối tượng DateTime thực.

+0

câu trả lời này sửa đổi đối tượng DateTime ban đầu tại chỗ. – thedarklord47

+1

Vâng, đó là cách \ DateTime hoạt động. Nếu điều đó không tốt cho bạn, hãy sử dụng \ DateTimeImmutable. – vascowhite

+0

ah cảm ơn bạn! không biết DateTimeImmutable là một điều. – thedarklord47

1

này nên làm việc, quá

$date = date("Y-m-d H:m:s", strtotime('-24 hours')); 
3

Điều này có thể hữu ích cho bạn:

//calculate like this 
$date = date("Y-m-d H:m:s", (time()-(60*60*24))); 

//check the date 
echo $date; 
+0

Đã bỏ phiếu cho sự không đáng tin cậy: http://sandbox.onlinephpfunctions.com/code/729ae5a21769fdc06a5c340457d5793f28c04642 – mickmackusa

1

Bạn chỉ có thể sử dụng time() để có được những dấu thời gian hiện tại.

$date = date("Y-m-d H:m:s", strtotime('-24 hours', time())); 
10

bạn có thể làm điều này bằng nhiều cách ...

echo date('Y-m-d H:i:s',strtotime('-24 hours')); // "i" for minutes with leading zeros 

HOẶC

echo date('Y-m-d H:i:s',strtotime('last day')); // 24 hours (1 day) 

Output

2013-07-17 10:07:29 
0

tất cả các bạn phải làm là thay đổi mã của bạn là

$now = strtotime(date("Y-m-d H:m:s")); 
$date = date("Y-m-d H:m:s", strtotime('-24 hours', $now)); 
0
$now = date("Y-m-d H:i:s"); 
$date = date("Y-m-d H:i:s", strtotime('-24 hours', strtotime($now))); 

Add "strtotime" trước $ bây giờ, và Ymd H: m: s thay thế với Ymd H: i: s

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