如何在PHP中获得自0年以来的天数?

时间:2014-04-08 17:23:44

标签: php date date-math

它等同于MySQL to_days() function

是否有内置PHP函数可以执行此操作,还是需要将某些内容拼凑在一起?

3 个答案:

答案 0 :(得分:7)

你需要自己编写,但这并不难:

$now = new DateTime();
$zero = new DateTime('0000-00-00'); // -0001-11-30 - Nov 30, 1 BC. Interesting.
$diff = $now->diff($zero);
echo $diff->format('%a days'); // 735728 days

Demo使用文字年零。你显然希望在那里放一个有效的日期。

$now = new DateTime();
$zero = new DateTime('0001-01-01'); 
$diff = $now->diff($zero);
echo $diff->format('%a days'); // 735330 days

Demo

作为一个班轮:

echo (new DateTime())->diff(new DateTime('0001-01-01'))->format('%a days');

作为一项功能:

function toDays($date) {
    return (new DateTime())->diff(new DateTime($date))->format('%a');
}

答案 1 :(得分:1)

DateTime类可以处理非常广泛的日期。这可以通过计算0000-00-00(DateTime认为是有效日期)和今天UTC的天数来实现。将结果除以365,你得到从第0年开始的年数。这可以做成一个很好的单行:

$days  = date_create('now')->diff(date_create('0000-00-00'))->format('%a');
$years = floor($days / 365.242); // => 2014

请注意,Anno Domini(AD)系统中不存在零年。

答案 2 :(得分:1)

您可以使用Julian日计数,即使用cal_to_js(),参见http://www.php.net/manual/de/function.cal-to-jd.php,即使公历中没有第0年。