¿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
¿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
Respuestas:
$timestamp = strtotime('today midnight');
Es posible que desee echar un vistazo a lo que PHP tiene para ofrecer: http://php.net/datetime
$timestamp = strtotime('today');
es medianoche. Pero pssst, el de arriba parece más
strtotime('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.
$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.
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.com
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
strtotime('America/New_York today midnight');
? - 3v4l.org/I85qD
$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
strtotime()
, la mente estaba tan concentrada en la función de fecha. Disculpas
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.
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());