如何编写PHP函数,切换区域时区获取波斯/阿拉伯日期?
WordPress 中公历转波斯历/阿拉伯历的PHP函数实现
核心依赖说明
首先确保PHP的intl扩展已启用(WordPress主机通常默认支持,若未启用需联系主机商开启),这是实现多历法格式化的核心依赖。
通用转换函数
以下函数支持切换区域设置、时区,一键获取对应历法的本地化日期:
function convert_to_calendar( $date = 'now', $calendar_type = 'persian', // 可选值: persian / islamic / islamic_civil $locale = null, $timezone = null ) { // 检查intl扩展是否可用 if (!extension_loaded('intl')) { return '错误:PHP intl 扩展未启用,请开启后重试'; } // 处理默认参数:使用WordPress全局时区和语言设置 $locale = $locale ?? get_locale(); $timezone = $timezone ?? wp_timezone_string(); // 映射历法类型到Intl常量 $calendar_constant = match($calendar_type) { 'persian' => IntlDateFormatter::PERSIAN, 'islamic' => IntlDateFormatter::ISLAMIC, 'islamic_civil' => IntlDateFormatter::ISLAMIC_CIVIL, default => IntlDateFormatter::GREGORIAN, }; try { // 创建DateTime对象,兼容WordPress时区 $datetime = new DateTime($date, new DateTimeZone($timezone)); // 初始化日期格式化器 $formatter = new IntlDateFormatter( $locale, IntlDateFormatter::FULL, // 日期格式:完整格式(可改为LONG/MEDIUM/SHORT) IntlDateFormatter::NONE, // 不显示时间 $timezone, $calendar_constant ); // 返回格式化后的日期 return $formatter->format($datetime); } catch (Exception $e) { return '日期转换失败:' . $e->getMessage(); } }
调用示例
- 转换为波斯历(伊朗本地化)
// 获取当前日期的波斯历格式(波斯语) $persian_date = convert_to_calendar('now', 'persian', 'fa_IR', 'Asia/Tehran'); echo $persian_date; // 输出示例: ۱۴۰۳ خرداد ۱۵، شنبه
- 转换为阿拉伯民用历(沙特本地化)
// 将指定公历日期转为阿拉伯民用历(阿拉伯语) $islamic_date = convert_to_calendar('2024-06-05', 'islamic_civil', 'ar_SA', 'Asia/Riyadh'); echo $islamic_date; // 输出示例: الجمعة، ١٥ ذو الحجة ١٤٤٥ هجريًا
- 使用WordPress默认设置
// 自动使用WordPress后台设置的语言和时区 $default_persian = convert_to_calendar('now', 'persian');
自定义格式说明
如果需要自定义日期格式(比如仅显示年/月/日),可以修改IntlDateFormatter的构造参数,或者使用setPattern()方法:
// 自定义波斯历格式:YYYY/MM/DD $formatter->setPattern('yyyy/MM/dd');
内容的提问来源于stack exchange,提问作者Alipvd
相关产品推荐
相关产品推荐

