/**
* Convert NHS dates to MySQL format.
* Strings that do not match the NHS format are returned unchanged or are not valid dates.
*
* @param string|array $data Data containing one or more NHS dates
* @param array $fields Fields (keys) to convert (optional, if empty then all fields are checked for dates)
* @return string|array
*/
public static function convertNHS2MySQL($data, $fields = null)
{
if ($is_string = !is_array($data)) {
$data = array('dummy' => $data);
}
$list = $fields ? $fields : array_keys($data);
foreach ($list as $key) {
if (isset($data[$key])) {
// traverse down arrays to convert nested structures
if (is_array($data[$key])) {
$data[$key] = Helper::convertNHS2MySQL($data[$key], $fields);
} elseif (is_string($data[$key]) && preg_match(self::NHS_DATE_REGEX, $data[$key])) {
$check_date = date_parse_from_format('j M Y', $data[$key]);
if (checkdate($check_date['month'], $check_date['day'], $check_date['year'])) {
$data[$key] = date('Y-m-d', strtotime($data[$key]));
}
}
}
}
if ($is_string) {
return $data['dummy'];
} else {
return $data;
}
}