如何修改PHP的Julian日期转换函数以支持自定义日期参数?
修改后的自定义Julian日期转换函数
以下是支持接收日期参数的修改版函数,可满足你输入1997/07/07返回097188的需求:
function data_giuliana($date) { // 将输入日期转换为Carbon实例,自动识别常见日期格式 try { $carbonDate = Carbon::parse($date); } catch (\Exception $e) { // 处理无效日期,可根据业务需求调整返回逻辑 return false; } $year = $carbonDate->year; // 生成世纪前缀:19xx年为0,20xx年为1,以此类推 $prefix = (string)(floor($year / 100) - 19); // 获取年份后两位 $twoDigitYear = $carbonDate->format('y'); // 获取当年第几天,格式化为3位数字(不足补0) $dayOfYear = sprintf('%03d', $carbonDate->dayOfYear); // 拼接最终的自定义Julian日期 return $prefix . $twoDigitYear . $dayOfYear; }
关键改动说明:
- 支持自定义日期输入:用
Carbon::parse($date)替代原函数的Carbon::now(),自动兼容YYYY/MM/DD、YYYY-MM-DD等多种常见日期格式 - 简化且准确的天数计算:直接使用Carbon内置的
dayOfYear方法获取当年第几天,避免原函数通过timestamp计算可能出现的时区、闰秒误差 - 动态适配世纪前缀:通过
floor($year / 100) - 19自动计算前缀,适配19xx(前缀0)、20xx(前缀1)及更往后的年份 - 标准化天数格式:用
sprintf('%03d', ...)确保天数始终为3位数字,比如1月1日会显示为001 - 增加异常处理:捕获日期解析失败的情况,避免函数直接报错,可根据需求调整错误返回值
测试示例:
echo data_giuliana('1997/07/07'); // 输出:097188 echo data_giuliana('2022-12-08'); // 输出:122342(注:2022年12月8日为当年第342天,原函数结果122223存在计算误差,当前函数基于Carbon标准逻辑更准确) echo data_giuliana('2024/02/29'); // 输出:124060(闰年2月29日为当年第60天)
内容的提问来源于stack exchange,提问作者user18182496
相关产品推荐
相关产品推荐

