2010-03-26 32 views
18

Tôi có dấu thời gian unix cho thời gian hiện tại. Tôi muốn lấy dấu thời gian unix cho ngày bắt đầu của ngày hôm sau.Làm cách nào để tìm dấu thời gian unix cho ngày bắt đầu của ngày tiếp theo trong php?

$current_timestamp = time(); 
$allowable_start_date = strtotime('+1 day', $current_timestamp); 

Như tôi đang làm nó bây giờ, tôi chỉ đơn giản là thêm 1 toàn bộ cả ngày để dấu thời gian unix, khi thay vào đó tôi muốn tìm ra bao nhiêu giây còn lại trong ngày hiện tại này, và chỉ thêm rằng nhiều giây để có được dấu thời gian unix cho phút đầu tiên của ngày hôm sau.

Cách tốt nhất để giải quyết vấn đề này là gì?

Trả lời

26

Cách đơn giản nhất để chỉ đơn giản là "make" tại thời điểm đó:

$tomorrowMidnight = mktime(0, 0, 0, date('n'), date('j') + 1); 

Trích:

Tôi muốn tìm ra bao nhiêu giây còn lại trong ngày hiện tại này, và chỉ thêm rằng nhiều giây để có được dấu thời gian unix cho phút đầu tiên của ngày hôm sau.

Đừng làm như vậy. Tránh tính toán tương đối bất cứ khi nào có thể, đặc biệt là nếu nó rất tầm thường để "hoàn toàn" có được dấu thời gian mà không có giây arithmetics.

+2

Vì vậy, đây là giống như strtotime ('+ 1 ngày', mktime (0, 0, 0))? – zeckdude

+2

@zeckdude Về cơ bản có, và tôi sẽ nói hiệu quả hơn, vì 'strtotime' là mạnh mẽ, nhưng chậm hơn. Ngoài ra, bạn đang tạo dấu thời gian * vào nửa đêm *, không thêm ngày vào dấu thời gian vào lúc nửa đêm, có thể hoặc không đáng tin cậy hơn trong các trường hợp cạnh như công tắc tiết kiệm ánh sáng ban ngày, v.v. – deceze

+0

cool! Cảm ơn bạn đã làm rõ! – zeckdude

2

Something đơn giản như:

$nextday = $current_timestamp + 86400 - ($current_timestamp % 86400); 

là những gì tôi muốn sử dụng.

+0

là những gì 86400? số đó đại diện cho cái gì? – zeckdude

+0

Vì vậy, nếu tôi muốn sử dụng ý tưởng tương tự này nhưng để có được dấu thời gian cho sự bắt đầu của hai ngày kể từ bây giờ, tôi sẽ chỉ tăng gấp đôi con số đó, chẳng hạn như $ twodays = $ current_timestamp + 172800 - ($ current_timestamp% 172800); ? – zeckdude

+1

86400 là số giây trong một ngày –

3
$tomorrow = strtotime('+1 day', strtotime(date('Y-m-d'))); 
$secondsLeftToday = time() - $tomorrow; 
+3

phía bên phải của nhiệm vụ thứ hai là ngược. – intuited

+3

Dòng '$ tomorrow' đó là một cách phức tạp tuyệt vời để thực hiện' strtotime ('+ 1 ngày', mktime (0, 0, 0)) '. – deceze

+0

Tuyệt, điều này chắc chắn là dễ đọc nhất. –

8

Bạn có thể dễ dàng có được ngày mai vào lúc nửa đêm timestamp với:

$tomorrow_timestamp = strtotime('tomorrow'); 

Nếu bạn muốn để có thể làm một số lượng biến của ngày này bạn có thể dễ dàng làm điều đó như vậy:

$days = 4; 
$x_num_days_timestamp = strtotime(date('m/d/Y', strtotime("+$days days")))); 
+0

Như lừa dối chỉ ra trên strtotime ('+ 1 ngày', mktime (0, 0, 0)) là thanh lịch hơn so với các giải pháp lồng nhau tôi đã cho. Vì vậy: $ days = 4; $ x_num_days_timestamp = strtotime ("+ $ ngày ngày", mktime (0, 0, 0)); – tony4d

0

Sự bắt đầu của ngày hôm sau được tính như thế này:

<?php 

$current_timestamp = time(); 
$allowable_start_date = strtotime('tomorrow', $current_timestamp); 

echo date('r', $allowable_start_date); 

?> 

Nếu nó cần phải làm theo yêu cầu đặc biệt của bạn:

<?php 

$current_timestamp = time(); 
$seconds_to_add = strtotime('tomorrow', $current_timestamp) - $current_timestamp; 

echo date('r', $current_timestamp + $seconds_to_add); 

?> 
0

biến thể của tôi:

$allowable_start_date = strtotime('today +1 day'); 
Các vấn đề liên quan