Files
mrbs-equbao-2026/lib/MRBS/Intl/FormatterFlatpickr.php
T
人事系统开发 1ba6efd8ed MRBS 1.12.2 等保2.0二级整改完整提交
包含:登录失败锁定、90天密码有效期、30分钟会话超时、
强制改密、登录审计日志、屏幕水印、企业背景图、
备案信息固定底部、favicon、JS空集合保护、
会话过期体验优化(403 JSON)、display_errors 关闭、
固定 key 根治 Integrity check failed 等全部改动

注意:config.inc.php/.htaccess/.user.ini 含敏感信息,
通过 .gitignore 排除,勿推送到公开仓库。
2026-09-09 16:55:02 +08:00

177 lines
5.2 KiB
PHP

<?php
declare(strict_types=1);
namespace MRBS\Intl;
class FormatterFlatpickr implements Formatter
{
// See https://flatpickr.js.org/formatting/
private const FORMATTING_TOKENS = [
'd', 'D', 'l', 'j', 'J', 'w', 'W', 'F', 'm', 'n', 'M',
'U', 'y', 'Y', 'Z', 'H', 'h', 'G', 'i', 'S', 's', 'K'];
// Convert an ICU pattern token into the nearest equivalent token.
// Throws an exception if the token can't be converted.
public function convert(string $token) : string
{
switch ($token) {
// AM or PM
case 'a': // PM [abbrev]
case 'aa': // PM [abbrev]
case 'aaa': // PM [abbrev]
case 'aaaa': // PM [wide]
case 'aaaaa': // p
// am, pm, noon, midnight
case 'b': // mid.
case 'bb': // mid.
case 'bbb': // mid.
case 'bbbb': // midnight
case 'bbbbb': // md
// flexible day periods
case 'B': // at night [abbrev]
case 'BB': // at night [abbrev]
case 'BBB': // at night [abbrev]
case 'BBBB': // at night [wide]
case 'BBBBB': // at night [narrow]
$format = 'K'; // AM/PM, eg AM or PM
break;
// stand-alone local day of week
case 'cccc': // Tuesday
// day of week
case 'EEEE': // Tuesday
// local day of week
case 'eeee': // Tuesday
$format = 'l'; // A full textual representation of the day, eg Sunday through Saturday
break;
// stand-alone local day of week
case 'ccc': // Tue
case 'ccccc': // T
case 'cccccc': // Tu
// day of week
case 'E': // Tue
case 'EE': // Tue
case 'EEE': // Tue
case 'EEEEE': // T
case 'EEEEEE': // Tu
// local day of week
case 'eee': // Tue
case 'eeeee': // T
case 'eeeeee': // Tu
$format = 'D'; // A textual representation of a day, eg Mon through Sun
break;
// day in month
case 'd': // 2
$format = 'j'; // Day of the month without leading zeros, eg1 to 31
break;
// day in month
case 'dd': // 02
$format = 'd'; // Day of the month, 2 digits with leading zeros, eg 01 to 31
break;
// hour in day (0~23)
case 'H': // 0
// hour in day (0~23)
case 'HH': // 00
$format = 'H'; // Hours (24 hours), eg 00 to 23
break;
// hour in am/pm (1~12)
case 'h': // 7
$format = 'h'; // Hours 1 to 12
break;
// hour in am/pm (1~12)
case 'hh': // 07
$format = 'G'; // Hours, 2 digits with leading zeros 1 to 12
break;
// stand-alone month in year
case 'L': // 9
// month in year
case 'M': // 9
$format = 'n'; // Numeric representation of a month, without leading zeros 1 through 12
break;
// stand-alone month in year
case 'LL': // 09
// month in year
case 'MM': // 09
$format = 'm'; // Numeric representation of a month, with leading zero 01 through 12
break;
// stand-alone month in year
case 'LLL': // Sep
// month in year
case 'MMM': // Sep
$format = 'M'; // A short textual representation of a month Jan through Dec
break;
// stand-alone month in year
case 'LLLL': // September
// month in year
case 'MMMM': // September
$format = 'F'; // A full textual representation of a month January through December
break;
// minute in hour
case 'm': // 4
$format = 'i'; // Minutes 00 to 59
break;
// minute in hour
case 'mm': // 04
$format = 'i'; // Minutes 00 to 59
break;
// second in minute
case 's': // 5
$format = 's'; // Seconds 0, 1 to 59
break;
// second in minute
case 'ss': // 05
$format = 'S'; // Seconds, 2 digits 00 to 59
break;
// week of year
// The ICU documentation isn't very clear what is meant by "week of year", but it seems to be locale
// dependent. In many locales it is the ISO week number, but in some locales it isn't. It (partly?)
// depends on the locale's first day of the week, which can be got from IntlCalendar::getFirstDayOfWeek().
case 'w': // 7
case 'ww': // 07
$format = 'W'; // Numeric representation of the week 0 (first week of the year) through 52 (last week of the year)
break;
// year
case 'y': // 1996
case 'yyyy': // 1996
$format = 'Y'; // A full numeric representation of a year, 4 digits, eg 1999 or 2003
break;
// year
case 'yy': // 96
$format = 'y'; // A two digit representation of a year 99 or 03
break;
default:
throw new \MRBS\Exception("Could not convert '$token'");
break;
}
return $format;
}
public function escape(string $char): string
{
if (in_array($char, self::FORMATTING_TOKENS))
{
return '\\\\' . $char;
}
return $char;
}
}