function attendance_strftimehm($time) {
$mins = userdate($time, '%M');
if ($mins == '00') {
- return userdate($time, get_string('strftimeh', 'attendance'));
+ $format = get_string('strftimeh', 'attendance');
} else {
- return userdate($time, get_string('strftimehm', 'attendance'));
+ $format = get_string('strftimehm', 'attendance');
}
+
+ $userdate = userdate($time, $format);
+
+ // Some Lang packs use %p to suffix with AM/PM but not all strftime support this.
+ // Check if %p is in use and make sure it's being respected.
+ if (stripos($format, '%p')) {
+ // Check if $userdate did something with %p by checking userdate against the same format without %p
+ $formatwithoutp = str_ireplace('%p', '', $format);
+ if (userdate($time, $formatwithoutp) == $userdate) {
+ // The date is the same with and without %p - we have a problem.
+ if (userdate($time, '%H') > 11) {
+ $userdate .= 'pm';
+ } else {
+ $userdate .= 'am';
+ }
+ }
+ // Some locales and O/S don't respect correct intended case of %p vs %P
+ // This can cause problems with behat which expects AM vs am.
+ if (strpos($format, '%p')) { // Should be upper case according to PHP spec.
+ $userdate = str_replace('am', 'AM', $userdate);
+ $userdate = str_replace('pm', 'PM', $userdate);
+ }
+ }
+
+ return $userdate;
}
/**