2010-03-26 3 views
18

Ich habe einen Unix-Zeitstempel für die aktuelle Zeit. Ich möchte den Unix-Zeitstempel für den Start des nächsten Tages erhalten.Wie finde ich den Unix-Timestamp für den Start des nächsten Tages in PHP?

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

Wie ich es jetzt tue, habe ich einfach 1 ganzen ganzen Tag auf den Unix-Zeitstempel bin hinzufügen, wenn stattdessen würde Ich mag, um herauszufinden, wie viele Sekunden in diesem aktuellen Tag bleiben, und fügen Sie nur, dass viele Sekunden, um den Unix-Zeitstempel für die erste Minute des nächsten Tages zu erhalten.

Was ist der beste Weg, um darüber zu gehen?

Antwort

26

Der einfachste Weg einfach zu "make" zu dieser Zeit:

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

Zitat:

ich, wie viele Sekunden, um herauszufinden mochte, werden in diesem aktuellen Tag verlassen, und fügen Sie nur, dass viele Sekunden, um den Unix-Zeitstempel für die erste Minute für den nächsten Tag zu bekommen.

Tun Sie es nicht so. Vermeiden Sie relative Berechnungen wann immer möglich, besonders wenn es so einfach ist, den Zeitstempel ohne Sekunden-Arithmetik "absolut" zu bekommen.

+2

Also das gleiche wie strtotime ('+ 1 Tag', mktime (0, 0, 0))? – zeckdude

+2

@zackdude Eigentlich ja, und ich würde sagen effizienter, da 'strtotime' stark ist, aber langsamer. Außerdem machst du explizit einen Zeitstempel * um Mitternacht * und fügst keinen Tag zu einem Zeitstempel um Mitternacht hinzu, der in Randfällen wie Sommerzeitumschaltungen usw. zuverlässiger sein kann. – deceze

+0

cool! Danke für die Klarstellung! – zeckdude

2

etwas Einfaches wie:

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

ist, was ich verwenden würde.

+0

was die 86400? Was bedeutet diese Zahl? – zeckdude

+0

Also wenn ich diese Idee verwenden möchte, aber um den Zeitstempel für den Beginn von zwei Tagen ab jetzt zu bekommen, würde ich nur diese Zahl verdoppeln, wie $ twodays = $ current_timestamp + 172800 - ($ current_timestamp% 172800); ? – zeckdude

+1

86400 ist die Anzahl der Sekunden in einem Tag –

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

Die rechte Seite der zweiten Zuweisung ist rückwärts. – intuited

+3

Diese '$ tomorrow' Zeile ist eine unglaublich komplizierte Art, 'strtotime' ('+ 1 Tag', mktime (0, 0, 0)) 'zu machen. – deceze

+0

Cool, das ist definitiv das lesbarste. –

8

Sie können ganz einfach morgen um Mitternacht Zeitstempel erhalten:

$tomorrow_timestamp = strtotime('tomorrow'); 

Wenn Sie eine variable Anzahl von Tagen in der Lage sein wollen, zu tun Sie leicht tun könnte etwa so:

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

Wie deceze oben strtotime ('+ 1 Tag', mktime (0, 0, 0)) ist eleganter als die verschachtelte Lösung, die ich gab. Also: $ Tage = 4; $ x_num_days_timestamp = strtotime ("+ $ Tage Tage", mktime (0, 0, 0)); – tony4d

0

Der Start des nächsten Tages wird wie folgt berechnet:

<?php 

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

echo date('r', $allowable_start_date); 

?> 

Wenn es braucht Ihre eigenartige Forderung folgen:

<?php 

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

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

?> 
0

Meine Variante:

$allowable_start_date = strtotime('today +1 day');