¿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.

Gracias

usuario1701398
fuente
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

hakre
fuente
52
@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 = new DateTime();
$today->setTime(0,0);

O si está usando PHP 5.4 o posterior, puede hacerlo de esta manera:

$today = (new DateTime())->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.

Objeto PHP DateTime

Joe Meyer
fuente
14
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.
Christopher K.
19

Hoy a medianoche. Fácil.

$stamp = mktime(0, 0, 0);
gato oso
fuente
7

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();

Las posibles definiciones de "aquí" se enumeran en https://secure.php.net/manual/en/timezones.php

William Entriken
fuente
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.

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

SamHuckaby
fuente
marca de tiempo? Eso es solo una cita.
wesside
¿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
Jan Galtowski
fuente
1
$timestamp = strtotime('today midnight');

es lo mismo que

$timestamp = strtotime('today');

y es un poco menos de trabajo en su servidor.

Caso
fuente
0

$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.

Victor Mbamara
fuente
0

Si está utilizando Carbon, puede hacer lo siguiente. También puede formatear esta fecha para establecer un Expireencabezado HTTP.

Carbon::parse('tomorrow midnight')->format(Carbon::RFC7231_FORMAT)
nowox
fuente
0

Respuesta actualizada el 19 de abril de 2020

Simplemente podemos hacer esto:

$today = date('Y-m-d 00:00:00');

aspilar
fuente
-1

function getTodaysTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const startOfDay = currentTimeStamp - (currentTimeStamp % 86400);
  return { startOfDay, endOfDay: startOfDay + 86400 - 1 };
}

// starts from sunday
function getThisWeeksTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const currentDay = new Date(currentTimeStamp * 1000);
  const startOfWeek = currentTimeStamp - (currentDay.getDay() * 86400) - (currentTimeStamp % 86400);
  return { startOfWeek, endOfWeek: startOfWeek + 7 * 86400 - 1 };
}


function getThisMonthsTimeStamp() {
  const currentTimeStamp = Math.round(Date.now() / 1000);
  const currentDay = new Date(currentTimeStamp * 1000);
  const startOfMonth = currentTimeStamp - ((currentDay.getDate() - 1) * 86400) - (currentTimeStamp % 86400);
  const currentMonth = currentDay.getMonth() + 1;
  let daysInMonth = 0;
  if (currentMonth === 2) daysInMonth = 28;
  else if ([1, 3, 5, 7, 8, 10, 12].includes(currentMonth)) daysInMonth = 31;
  else daysInMonth = 30;
  return { startOfMonth, endOfMonth: startOfMonth + daysInMonth * 86400 - 1 };
}


console.log(getTodaysTimeStamp());
console.log(getThisWeeksTimeStamp());
console.log(getThisMonthsTimeStamp());

Avinash_ks
fuente
La pregunta se relaciona con PHP. Esta respuesta está escrita en JavaScript
Café eléctrico