Dado que esto realmente no muestra cómo convertir YYYY: DDD: HH: MM: SS time a unix segundos usando la opción "z", debe crear sus propias funciones para convertir el DOY a mes y día del mes. Esto es lo que hice:
function _IsLeapYear ($Year)
{
$LeapYear = 0;
# Leap years are divisible by 4, but not by 100, unless by 400
if (($Year % 4 == 0) || ($Year % 100 == 0) || ($Year % 400 == 0)) {
$LeapYear = 1;
}
return $LeapYear;
}
function _DaysInMonth ($Year, $Month)
{
$DaysInMonth = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
return ((_IsLeapYear($Year) && $Month == 2) ? 29 : $DaysInMonth[$Month - 1]);
}
function yydddhhssmmToTime($Year, $DOY, $Hour, $Min, $Sec)
{
$Day = $DOY;
for ($Month = 1; $Day > _DaysInMonth($Year, $Month); $Month++) {
$Day -= _DaysInMonth($Year, $Month);
}
$DayOfMonth = $Day;
return mktime($Hour, $Min, $Sec, $Month, $DayOfMonth, $Year);
}
$timeSec = yydddhhssmmToTime(2016, 365, 23, 23, 23);
$str = date("m/d/Y H:i:s", $timeSec);
echo "unix seconds: " . $timeis . " " . $str ."<br>";
La salida en la página de muestra de su trabajo ya que puedo convertir de nuevo los segundos a los valores de entrada originales. segundos unix: 1483140203 30/12/2016 23:23:23
Esta es una GRAN respuesta. ¡Realmente debería obtener más votos positivos! Gracias – andreapier
Soporte para DateTime 'M': '' '$ schedule_format = str_replace (array ('M', 'Y', 'm', 'd', 'H', 'i', 'a'), array ('% b', '% Y', '% m', '% d', '% I', '% M', '% p'), $ dformat); '' ' – kenorb
Hay un pequeño error, como 'H' debe reemplazarse a% H (formato de 24 horas), no a% I (formato de 12 horas). Así que aquí está la línea mejorada: '' '$ schedule_format = str_replace (array ('M', 'Y', 'm', 'd', 'H', 'i', 'a'), array ('% b ','% Y ','% m ','% d ','% H ','% M ','% p '), $ dformat); '' ' – kenorb