Vì điều này không thực sự cho thấy cách chuyển đổi YYYY: DDD: HH: MM: SS thành giây bằng cách sử dụng tùy chọn "z", bạn phải tạo các hàm của riêng bạn để chuyển đổi DOY thành tháng và ngày trong tháng. Đây là những gì tôi đã làm:
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>";
Kết quả đầu ra trên trang cho thấy nó hoạt động vì tôi có thể chuyển đổi lại giây thành giá trị nhập ban đầu. unix giây: 1483140203 12/30/2016 23:23:23
Đây là một câu trả lời tuyệt vời. Nên thực sự nhận được nhiều upvotes! Cảm ơn – andreapier
Hỗ trợ cho DateTime 'M': '' '$ schedule_format = str_replace (mảng ('M', 'Y', 'm', 'd', 'H', 'i', 'a'), mảng ('% b', '% Y', '% m', '% d', '% I', '% M', '% p'), $ dformat); '' ' – kenorb
Có một lỗi nhỏ, vì 'H' nên được thay thế thành% H (định dạng 24 giờ), không phải% I (định dạng 12 giờ). Vì vậy, đây là dòng cải tiến: '' '$ schedule_format = str_replace (mảng ('M', 'Y', 'm', 'd', 'H', 'i', 'a'), mảng ('% b ','% Y ','% m ','% d ','% H ','% M ','% p '), $ dformat); '' ' – kenorb