obtener fecha español day actual php datetime timestamp days

fecha - Días reales entre dos marcas de tiempo de Unix en PHP



strtotime+1 day (4)

Redondee las marcas de tiempo hasta los 86400 segundos más cercanos, tome la diferencia y divida por 86400:

$start_time = strtotime("2012-01-15 23:59"); $end_time = strtotime("2012-01-16 00:05"); $start_time -= $start_time % 86400; $end_time -= $end_time % 86400; $days = ($end_time - $start_time) / 86400;

El redondeo hace que cada marca de tiempo sea la medianoche de ese día, y la división le da el número de días desde la época. Sin embargo, esto solo funcionará en UTC.

No, este no es el estándar +86400 segundos entre las fechas.

$start_time = strtotime("2012-01-15 23:59"); $end_time = strtotime("2012-01-16 00:05");

$ daysInBetweenTimestamps =?

Ese es el problema que actualmente estoy enfrentando, ya que las marcas de tiempo pueden oscilar entre 5 minutos y 5 horas, por ejemplo, usar el estándar +86400 para ver si es más de un día no funcionaría, y debido a la gran cantidad de indexación que estoy haciendo, me gustaría ver si hay una manera más eficiente de verificar si se ha iniciado un nuevo día en lugar de hacer una fecha ("d")> $ prevDay en el segundo nivel.

Actualización con la prueba para el primer ejemplo:

echo "Absolute Start: ".date("Y-m-d H:i:s",$start)."<br />"; echo "Absolute End: ".date("Y-m-d H:i:s",$end)."<br />"; echo "Interval Used: $interval(seconds) OR ".($interval / 60)."(minutes)<br />"; $numberOfIntervals = ceil(($end - $start) / $interval); echo "Number of intervals:$numberOfIntervals<br /><br />"; if ($numberOfIntervals > 0){ for ($i = 0; $i < $numberOfIntervals; $i++){ $curStart = $start + ($interval * $i); $curEnd = $curStart + $interval; if ($curEnd > $end){$curEnd = $end;} echo "Interval Start DateTime: ".date("Y-m-d H:i:s",$curStart)."<br />"; echo "Interval End DateTime: ".date("Y-m-d H:i:s",$curEnd)."<br />"; /* EXAMPLE PHP5.3 DateTime START - NOT WORKING */ $startDiff = new DateTime("@$curStart"); $endDiff = new DateTime("@$curEnd"); $diff = $startDiff->diff($endDiff); echo $diff->format("%a") . " days<br />"; if ($diff->format("%a") > 0){ /* EXAMPLE PHP5.3 DateTime END */ /* EXAMPLE Julian START - WORKS */ $days = unixtojd($curEnd) - unixtojd($curStart); echo "Number of days:$days<br />"; if ($days > 0){ /* EXAMPLE Julian END */ // Multiple days so the log files are split echo "Multiple days so log files are split<br />"; }else{ echo "Single day so log files are NOT split<br />"; } } }

La salida se ve de la siguiente manera:

Absolute Start: 2012-01-25 23:59:00 Absolute End: 2012-01-26 00:02:00 Interval Used: 180(seconds) OR 3(minutes) Number of intervals:1 Interval Start DateTime: 2012-01-25 23:59:00 Interval End DateTime: 2012-01-26 00:02:00

=== EJEMPLO 1 INICIO ===

0 days Single day so log files are NOT split

¿Me estoy perdiendo algo en el diff?

=== EJEMPLO 1 FIN ===

=== EJEMPLO 3 INICIO ===

Number of days:1 Multiple days so log files are split

=== EJEMPLO 3 FIN ===


Usa el día juliano

$days = unixtojd($t1) - unixtojd($t2);

o si no estás en UTC ...

$days = unixtojd($t1 - $tz) - unixtojd($t2 - $tz);

donde $tz es el desplazamiento de la zona horaria en segundos.


Use la clase DateInterval de php5.3 :

$now = new DateTime(); $then = new DateTime("@123456789"); //this is your timestamp $diff = $now->diff($then); echo "then: " . $then->format("Y-m-d") . "/n"; echo $diff->format("%a") . " days/n";

productos:

then: 1973-11-29 13937 days


<?php $start_time = strtotime("2012-01-15 23:59"); $end_time = strtotime("2012-01-16 00:05"); $time_zone = 19800; # My time zone: UTC+0530 hours = UTC+19800 seconds $days = intval(($end_time + $time_zone) / 86400) - intval(($start_time + $time_zone) / 86400); echo "$days/n"; ?>