The problem here is that strtotime()
cannot parse date strings in custom formats. From the documentation for strtotime()
(emphasis mine):
Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed. To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or
DateTime::createFromFormat()
when possible.
The solution is to use DateTime::createFromFormat()
. It can parse a date with custom format:
$dateObj = DateTime::createFromFormat($dateformat, $selected_date);
$day = $dateObj->format('d'); // => 30