You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写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();
    }
}

调用示例

  1. 转换为波斯历(伊朗本地化)
// 获取当前日期的波斯历格式(波斯语)
$persian_date = convert_to_calendar('now', 'persian', 'fa_IR', 'Asia/Tehran');
echo $persian_date; // 输出示例: ۱۴۰۳ خرداد ۱۵، شنبه
  1. 转换为阿拉伯民用历(沙特本地化)
// 将指定公历日期转为阿拉伯民用历(阿拉伯语)
$islamic_date = convert_to_calendar('2024-06-05', 'islamic_civil', 'ar_SA', 'Asia/Riyadh');
echo $islamic_date; // 输出示例: الجمعة، ١٥ ذو الحجة ١٤٤٥ هجريًا
  1. 使用WordPress默认设置
// 自动使用WordPress后台设置的语言和时区
$default_persian = convert_to_calendar('now', 'persian');

自定义格式说明

如果需要自定义日期格式(比如仅显示年/月/日),可以修改IntlDateFormatter的构造参数,或者使用setPattern()方法:

// 自定义波斯历格式:YYYY/MM/DD
$formatter->setPattern('yyyy/MM/dd');

内容的提问来源于stack exchange,提问作者Alipvd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:22:51