如何通过PHP Date获取儒略日及年内儒略日天数?
解决PHP日期处理的两个儒略日问题
嘿,我来帮你搞定这两个PHP日期相关的问题,直接上干货!
1. 获取天文意义上的儒略日(Julian Date)
PHP的date()函数没有直接输出儒略日的格式符,不过我们可以借助DateTime类或者时间戳来计算。儒略日是从公元前4713年1月1日正午开始的连续天数,计算的时候要注意基于UTC时区(避免时区偏移影响结果)。
代码示例:
$dateString = '2018-04-01'; // 初始化DateTime对象,指定UTC时区 $date = new DateTime($dateString, new DateTimeZone('UTC')); // 获取时间戳(从1970-01-01 00:00:00 UTC到指定日期的秒数) $timestamp = $date->getTimestamp(); // 计算儒略日:1970-01-01 00:00:00 UTC对应的儒略日是2440587.5 $julianDate = $timestamp / 86400 + 2440587.5; echo $julianDate; // 输出结果约为2458208.5
2. 获取年内儒略日天数(一年中的第几天)
这个需求其实就是要得到指定日期是当年的第几天,比如你给的2018-04-01预期返回91。PHP有现成的格式符可以用,不过要注意一个小坑:
方法1:用date()函数
$date = '2018-04-01'; // 用'z'格式符获取当年的第0天开始的数值,所以要加1 $dayOfYear = date('z', strtotime($date)) + 1; echo $dayOfYear; // 输出91
方法2:用DateTime类(更推荐,处理复杂日期更可靠)
$dateObj = new DateTime('2018-04-01'); // 同样,'z'返回的是0起始的数值,加1得到实际天数 $dayOfYear = $dateObj->format('z') + 1; echo $dayOfYear; // 输出91
注意点:
z格式符返回的是0(1月1日)到364或365(12月31日)的整数,所以必须加1才能得到我们日常说的“第N天”。比如2020年(闰年)的3月1日,date('z', strtotime('2020-03-01'))返回59,加1后是60,符合闰年的天数计算。
内容的提问来源于stack exchange,提问作者Sate Wedos
相关产品推荐
相关产品推荐

