2010-03-26 8 views
18

Tengo una marca de tiempo de Unix para la hora actual. Quiero obtener la marca de tiempo de Unix para el comienzo del día siguiente.¿Cómo puedo encontrar la marca de tiempo de unix para el comienzo del día siguiente en php?

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

Como lo estoy haciendo ahora, estoy simplemente añadiendo entera 1 día entero a la marca de tiempo Unix, cuando en lugar me gustaría averiguar cómo los segundos restantes en este día actual, y sólo añadir que muchos segundos para obtener la marca de tiempo de Unix durante el primer minuto del día siguiente.

¿Cuál es la mejor manera de hacerlo?

Respuesta

26

La forma más sencilla de simplemente "make" ese tiempo:

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

Cita:

me gustaría averiguar cómo los segundos restantes en este día actual, y sólo añadir que muchos segundos con el fin de obtener la marca de tiempo UNIX para el primer minuto del día siguiente.

No lo hagas así. Evite los cálculos relativos siempre que sea posible, especialmente si es tan trivial para obtener "absolutamente" la marca de tiempo sin segundos de aritmética.

+2

¿Entonces esto es lo mismo que strtotime ('+ 1 día', mktime (0, 0, 0))? – zeckdude

+2

@zeckdude Esencialmente sí, y yo diría más eficiente, ya que 'strtotime' es poderoso, pero más lento. También está haciendo explícitamente una marca de tiempo * a medianoche *, sin agregar un día a una marca de tiempo a la medianoche, que puede o no ser más confiable en casos extremos como cambios de horario de verano, etc. – deceze

+0

¡genial! ¡Gracias por la aclaración! – zeckdude

2

Algo tan simple como:

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

es lo que haría uso.

+0

lo que es el 86400? ¿Qué representa ese número? – zeckdude

+0

Entonces, si quisiera utilizar esta misma idea, pero para obtener la marca de tiempo para el inicio de dos días, duplicaría ese número, como $ twodays = $ current_timestamp + 172800 - ($ current_timestamp% 172800); ? – zeckdude

+1

86400 es la cantidad de segundos en un día –

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

el lado derecho de la segunda asignación está al revés. – intuited

+3

Esa línea '$ tomorrow' es una manera terriblemente intrincada de' strtotime ('+ 1 day', mktime (0, 0, 0)) '. – deceze

+0

Genial, este es definitivamente el más legible. –

8

Usted puede conseguir fácilmente mañana a la fecha y hora de la medianoche con:

$tomorrow_timestamp = strtotime('tomorrow'); 

Si usted quiere ser capaz de hacer una cantidad variable de días que fácilmente podría hacerlo de esta manera:

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

Como deceze señaló anteriormente strtotime ('+ 1 día', mktime (0, 0, 0)) es más elegante que la solución anidada que di. Entonces: $ días = 4; $ x_num_days_timestamp = strtotime ("+ $ días días", mktime (0, 0, 0)); – tony4d

0

El comienzo del día siguiente se calcula así:

<?php 

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

echo date('r', $allowable_start_date); 

?> 

si tiene que seguir su peculiar requisito:

<?php 

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

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

?> 
0

Mi variante:

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