Calculate last month, last 3 months, and last 6 months from today I am looking for some ideas on how this could be improved:

switch ($periodValue) {
    case "lastmonth":
        $until = mktime(0, 0, 0, date('n'), 1, date('Y'));
        $from = mktime(0, 0, 0, date('n', $until) - 1, 1, date('Y', $until));
        break;
    case "last3month":
        $until = mktime(0, 0, 0, date('n'), 1, date('Y'));
        $from = mktime(0, 0, 0, date('n', $until)-3, 1, date('Y', $until));
        break;
    case "last6month":
        $until = mktime(0, 0, 0, date('n'), 1, date('Y'));
        $from = mktime(0, 0, 0, date('n', $until)-6, 1, date('Y', $until));
        break;


How could I make this "smarter", so that it works out if we are near the end of the month it will show the last 30 days instead of the previous month?
Try the DateTime class. In combination with the DateInterval class you can do something like this:

$until = new DateTime();
$interval = new DateInterval('P2M');//2 months
$from = $until-&gt;sub($interval);
echo 'from' . $from-&gt;format('Y-m-d') . 'until' . $until-&gt;format('Y-m-d');


Also, you have to set the $until variable only once, before the switch statement.