3v4l.org

run code in 300+ PHP versions simultaneously
<?php function moon($time = null, $mps = 2551443) { $time = is_null($time) ? 0 : (time() - $time); $first_moon = time()-mktime(0, 0, 0, 0, 0, 1923); // first moon (1923) date_default_timezone_set("UTC"); return [ 'date' => date_create_from_format('U', time()-$time)->format('Y-m-d H:i:s'), 'lunation' => ($first_moon-$time)/$mps, 'phase' => ($time - $mps * intval($time / $mps)) / $mps ]; } $mps = 2551443; // moon phase in seconds (29 days, 12 hours, 44 mins, 3 secs) $test = function () use ($mps) { $begin = new DateTime('2001-01-24'); $end = new DateTime('2004-12-12'); $dtia = date_create_from_format('U', 0); $dtib = date_create_from_format('U', $mps); $interval = new DateInterval('P'.$dtia->diff($dtib)->format('%aDT%hH%iM%sS')); $daterange = new DatePeriod($begin, $interval ,$end); foreach($daterange as $date){ yield moon($date->format('U')); } }; foreach ($test() as $result) { print_r($result); }

preferences:
27.23 ms | 402 KiB | 5 Q