versiones ultima tiempo sistemas sistema que operativos operativo caracteristicas php timestamp strtotime unix-timestamp

php - ultima - unix time converter



Dada una marca de tiempo de Unix, ¿cómo llegar al principio y al final de ese día? (7)

Tengo un sello de tiempo de Unix como este:

$timestamp=1330581600

¿Cómo obtengo el comienzo del día y el final del día para esa marca de tiempo?

e.g. $beginOfDay = Start of Timestamp''s Day $endOfDay = End of Timestamp''s Day

Intenté esto:

$endOfDay = $timestamp + (60 * 60 * 23);

Pero no creo que funcione porque la marca de tiempo en sí no es el comienzo exacto del día.


Just DateTime

$beginOfDay = DateTime::createFromFormat(''Y-m-d H:i:s'', (new DateTime())->setTimestamp($timestamp)->format(''Y-m-d 00:00:00''))->getTimestamp(); $endOfDay = DateTime::createFromFormat(''Y-m-d H:i:s'', (new DateTime())->setTimestamp($timestamp)->format(''Y-m-d 23:59:59''))->getTimestamp();

Primero se crea un objeto DateTime y la marca de tiempo se establece en la marca de tiempo deseada. Luego, el objeto se formatea como una cadena que establece la hora / minuto / segundo al comienzo o al final del día. Por último, se crea un nuevo objeto DateTime a partir de esta cadena y se recupera la marca de tiempo.

Legible

$dateTimeObject = new DateTime(); $dateTimeObject->setTimestamp($timestamp); $beginOfDayString = $dateTimeObject->format(''Y-m-d 00:00:00''); $beginOfDayObject = DateTime::createFromFormat(''Y-m-d H:i:s'', $beginOfDayString); $beginOfDay = $beginOfDayObject->getTimestamp();

Podemos obtener el final del día de una manera alternativa utilizando esta versión más larga:

$endOfDayObject = clone $beginOfDayOject(); // Cloning because add() and sub() modify the object $endOfDayObject->add(new DateInterval(''P1D''))->sub(new DateInterval(''PT1S'')); $endOfDay = $endOfDayOject->getTimestamp();

Zona horaria

La zona horaria también se puede configurar agregando un indicador de marca de hora al formato, como O y especificando la marca de hora después de crear el objeto DateTime:

$beginOfDay = DateTime::createFromFormat(''Y-m-d H:i:s O'', (new DateTime())->setTimezone(new DateTimeZone(''America/Los_Angeles''))->setTimestamp($timestamp)->format(''Y-m-d 00:00:00 O''))->getTimestamp();

Flexibilidad de DateTime

También podemos obtener otra información, como el inicio / final del mes o el inicio / final de la hora, cambiando el segundo formato especificado. Para el mes: ''Ym-01 00:00:00'' y ''Ymt 23:59:59'' . Por hora: ''Ymd H:00:00'' e ''Ymd H:59:59''

Usando varios formatos en combinación con los objetos add () / sub () y DateInterval, podemos obtener el comienzo o el final de cualquier período, aunque será necesario tener cuidado para manejar los años bisiestos correctamente.

Enlaces relevantes

De los documentos PHP:


Hoy fecha de inicio fecha y hora. Sencillo

$stamp = mktime(0, 0, 0); echo date(''m-d-Y H:i:s'',$stamp);


Para cualquier persona que tenga esta pregunta en el futuro:

Código de cualquier día

<?php $date = "2015-04-12 09:20:00"; $midnight = strtotime("midnight", strtotime($date)); $now = strtotime($date); $diff = $now - $midnight; echo $diff; ?>

Código del día actual

<?php $midnight = strtotime("midnight"); $now = date(''U''); $diff = $now - $midnight; echo $diff; ?>


Puede convertir la hora a los datos actuales y luego usar la función strtotime para encontrar el comienzo del día y simplemente agregar 24 horas para encontrar el final del día.

También puede usar el operador restante (%) para encontrar el día más cercano. Por ejemplo:

$start_of_day = time() - 86400 + (time() % 86400); $end_of_day = $start_of_day + 86400;


Puedes usar una combinación de date() y mktime() :

list($y,$m,$d) = explode(''-'', date(''Y-m-d'', $ts)); $start = mktime(0,0,0,$m,$d,$y); $end = mktime(0,0,0,$m,$d+1,$y);

mktime() es lo suficientemente inteligente como para envolver meses / años cuando se le da un día fuera del mes especificado (el 32 de enero será el 1 de febrero, etc.)


Strtotime se puede utilizar para cortar rápidamente la hora / minutos / segundos

$beginOfDay = strtotime("midnight", $timestamp); $endOfDay = strtotime("tomorrow", $beginOfDay) - 1;

DateTime también se puede usar, aunque requiere algunos pasos adicionales para obtener una marca de tiempo prolongada

$dtNow = new DateTime(); // Set a non-default timezone if needed $dtNow->setTimezone(new DateTimeZone(''Pacific/Chatham'')); $dtNow->setTimestamp($timestamp); $beginOfDay = clone $dtNow; // Go to midnight. ->modify(''midnight'') does not do this for some reason $beginOfDay->modify(''today''); $endOfDay = clone $beginOfDay; $endOfDay->modify(''tomorrow''); // adjust from the next day to the end of the day, per original question $endOfDay->modify(''1 second ago''); var_dump( array( ''time '' => $dtNow->format(''Y-m-d H:i:s e''), ''start'' => $beginOfDay->format(''Y-m-d H:i:s e''), ''end '' => $endOfDay->format(''Y-m-d H:i:s e''), ) );


$start_of_day = floor (time() / 86400) * 86400; $end_of_day = ceil (time() / 86400) * 86400;

Si necesita ambos valores en el mismo script. Es más rápido para +/- 86400 segundos para una de las variables que disparar tanto el piso como el techo. Por ejemplo:

$start_of_day = floor (time() / 86400) * 86400; $end_of_day = $start_of_day + 86400;