¿Recibe una marca de tiempo para hoy a la medianoche?
123
¿Cómo haría para obtener una marca de tiempo en php para hoy a la medianoche? Digamos que es lunes a las 5 p.m. y quiero la marca de tiempo para el lunes (hoy) a la medianoche (12 a.m.) que ya ha sucedido.
La medianoche no es am ni pm. Además, técnicamente, no existe una marca de tiempo para la medianoche.
hakre
16
@hakre No estoy de acuerdo contigo. La medianoche es a.m. y sea cual sea el formato en el que se encuentre una marca de tiempo, hay un valor para medianoche.
G-Nugget
1
si se considera a las 00:00:00 hoy o mañana. La medianoche de hoy, está detrás de nosotros, casi en todo momento, técnicamente. Quieres 23:59:59 de "esta noche", o 00:00:00 "medianoche de hoy, que es mañana", más o menos.
wesside
5
una hora de 00:00:00 sería la medianoche de hoy como en el tiempo que se tarda en llegar a las 00:00:00 que ya sucedieron. donde las 23:59:59 serían esta noche. Si estás hablando en términos de hoy. La medianoche es AM.
Nazca
4
00:00 es medianoche al comienzo del día, 24:00 es medianoche al final del día. Sin embargo, por simplicidad, la mayoría de los relojes digitales saltan las 24:00, lo que indica que la medianoche es el comienzo de un nuevo día. Es decir, el 8 de febrero a las 24:00 y el 9 de febrero a las 00:00 es en la práctica el mismo momento.
Johan
Respuestas:
239
$timestamp = strtotime('today midnight');
Es posible que desee echar un vistazo a lo que PHP tiene para ofrecer: http://php.net/datetime
@SamHuckaby: Es aún más fácil: $timestamp = strtotime('today');es medianoche. Pero pssst, el de arriba parece más
genial
De hecho, necesito empezar hoy y la medianoche de hoy. ¿Cómo puedo encontrar el comienzo de hoy, me refiero a las 00:00:00
Happy Coder
3
@AlwinAugustin: Debería considerar diferir su redacción. La medianoche es técnicamente entre dos días. Así que algo "ya no es hoy". Además: Midgnight de hoy (por definición) es (justo antes) el comienzo de hoy. Probablemente te refieres a la siguiente medianoche después de hoy al mediodía .
hakre
sí, en realidad, lo que necesito son las 00:00:00 de hoy y las 23:59:59 de hoy
Happy Coder
2
¡Tenga en cuenta que esto producirá la medianoche de la zona horaria de su servidor PHP, no UTC + 0 ! Para obtener UTC + 0 puedes usar strtotime('today+00:00').
mae
73
Creo que debería usar el nuevo objeto PHP DateTime, ya que no tiene problemas para hacer fechas más allá de las restricciones de 32 bits que tiene strtotime (). Aquí hay un ejemplo de cómo obtendría la fecha de hoy a la medianoche.
$today =newDateTime();
$today->setTime(0,0);
O si está usando PHP 5.4 o posterior, puede hacerlo de esta manera:
$today =(newDateTime())->setTime(0,0);
Luego puede usar echo $today->format('Y-m-d');para obtener el formato que desea que tenga la salida de su objeto.
También prefiero usar el nuevo objeto DateTime. Si combina esta respuesta con @ hakr, obtiene:, lo new DateTime('today midnight')que hace que la intención sea más clara (pero esto, por supuesto, es una cuestión de gustos).
Martijn
1
Estoy trabajando en ORM SQL y tuve que usar el objeto DateTime para las comparaciones. Esto es exactamente lo que estaba buscando. +1
NobleUplift
Puede ser$today = new DateTime('today')
ProgZi
También es útil si está utilizando Carbon, que hereda de DateTime. Por lo tanto, también puede hacer new Carbon('today midnight')y luego puede usar todas las cosas de Carbon como ->subDays(6). Ver carbon.nesbot.com
Christopher K.
Con respecto a la restricción de 32 bits: El documento de PHP para strtotime establece : "Para las versiones de PHP de 64 bits, el rango válido de una marca de tiempo es efectivamente infinito, ya que 64 bits pueden representar aproximadamente 293 mil millones de años en cualquier dirección". Por lo tanto, solo se aplica a php de 32 bits.
Está buscando calcular la hora del evento celestial más reciente en el que el sol pasó directamente debajo de sus pies, ajustado a las convenciones locales de marcar el mediodía y también potencialmente ajustando para que las personas tengan suficiente luz del día después de regresar a casa del trabajo, y para otras consideraciones políticas.
Desalentador, ¿verdad? En realidad, este es un problema común, pero la respuesta completa depende de la ubicación:
$zone =new \DateTimeZone('America/New_York');// Or your own definition of “here”
$todayStart =new \DateTime('today midnight', $zone);
$timestamp = $todayStart->getTimestamp();
Al igual que strtotime('America/New_York today midnight');? - 3v4l.org/I85qD
hakre
5
$today_at_midnight = strtotime(date("Ymd"));
debería darte lo que buscas.
explicación
Lo que hice fue usar la función de fecha de PHP para obtener la fecha de hoy sin ninguna referencia a la hora, y luego pasarla a la función 'cadena al tiempo' que convierte una fecha y hora en una marca de tiempo de época. Si no tiene una hora, asume el primer segundo de ese día.
¿Existe un formato particular que solicitó el OP? Si es así, me complacerá modificar mi publicación para devolver cualquier formato que deseen.
SamHuckaby
completamente pasada por alto strtotime(), la mente estaba tan concentrada en la función de fecha. Disculpas
wesside
2
De una manera más objetiva:
$today =new \DateTimeImmutable('today');
ejemplo:
echo (new \DateTimeImmutable('today'))->format('Y-m-d H:i:s');// will output: 2019-05-16 00:00:00
y:
echo (new \DateTimeImmutable())->format('Y-m-d H:i:s');
echo (new \DateTimeImmutable('now'))->format('Y-m-d H:i:s');// will output: 2019-05-16 14:00:35
$midnight = strtotime('midnight');es válido También puedes probar
strtotime('12am')o strtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]'). Omití agregar hoy antes de la medianoche porque el valor predeterminado es hoy.
Respuestas:
Es posible que desee echar un vistazo a lo que PHP tiene para ofrecer: http://php.net/datetime
fuente
$timestamp = strtotime('today');
es medianoche. Pero pssst, el de arriba parece másstrtotime('today+00:00')
.Creo que debería usar el nuevo objeto PHP DateTime, ya que no tiene problemas para hacer fechas más allá de las restricciones de 32 bits que tiene strtotime (). Aquí hay un ejemplo de cómo obtendría la fecha de hoy a la medianoche.
O si está usando PHP 5.4 o posterior, puede hacerlo de esta manera:
Luego puede usar
echo $today->format('Y-m-d');
para obtener el formato que desea que tenga la salida de su objeto.Objeto PHP DateTime
fuente
new DateTime('today midnight')
que hace que la intención sea más clara (pero esto, por supuesto, es una cuestión de gustos).$today = new DateTime('today')
new Carbon('today midnight')
y luego puede usar todas las cosas de Carbon como->subDays(6)
. Ver carbon.nesbot.comHoy a medianoche. Fácil.
fuente
Está buscando calcular la hora del evento celestial más reciente en el que el sol pasó directamente debajo de sus pies, ajustado a las convenciones locales de marcar el mediodía y también potencialmente ajustando para que las personas tengan suficiente luz del día después de regresar a casa del trabajo, y para otras consideraciones políticas.
Desalentador, ¿verdad? En realidad, este es un problema común, pero la respuesta completa depende de la ubicación:
Las posibles definiciones de "aquí" se enumeran en https://secure.php.net/manual/en/timezones.php
fuente
strtotime('America/New_York today midnight');
? - 3v4l.org/I85qDdebería darte lo que buscas.
explicación
Lo que hice fue usar la función de fecha de PHP para obtener la fecha de hoy sin ninguna referencia a la hora, y luego pasarla a la función 'cadena al tiempo' que convierte una fecha y hora en una marca de tiempo de época. Si no tiene una hora, asume el primer segundo de ese día.
Referencias: Función de fecha: http://php.net/manual/en/function.date.php
Cadena a tiempo: http://us2.php.net/manual/en/function.strtotime.php
fuente
strtotime()
, la mente estaba tan concentrada en la función de fecha. DisculpasDe una manera más objetiva:
ejemplo:
y:
fuente
es lo mismo que
y es un poco menos de trabajo en su servidor.
fuente
$midnight = strtotime('midnight');
es válidoTambién puedes probar
strtotime('12am')
ostrtotime('[input any time you wish to here. e.g noon, 6pm, 3pm, 8pm, etc]')
. Omití agregar hoy antes de la medianoche porque el valor predeterminado es hoy.fuente
Si está utilizando Carbon, puede hacer lo siguiente. También puede formatear esta fecha para establecer un
Expire
encabezado HTTP.fuente
Respuesta actualizada el 19 de abril de 2020
Simplemente podemos hacer esto:
$today = date('Y-m-d 00:00:00');
fuente
fuente