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

如何使用PHP将泰国日期(15 กรกฎาคม 2562)转换为英文日期?

解决PHP中泰国日期转英文日期的问题

我之前也碰到过类似的需求,泰国日期用的是佛历(BE),月份是泰文全称,转换的核心就是月份映射和佛历转公历这两步,下面给你两种实用的实现方法:

方法一:手动映射月份(无需额外扩展)

这种方法不依赖任何PHP扩展,兼容性拉满,适合所有运行环境:

  1. 先定义泰文月份到英文月份的映射数组,确保每个泰文全称都对应正确的英文月份:
$thaiToEnglishMonths = [
    'มกราคม' => 'January',
    'กุมภาพันธ์' => 'February',
    'มีนาคม' => 'March',
    'เมษายน' => 'April',
    'พฤษภาคม' => 'May',
    'มิถุนายน' => 'June',
    'กรกฎาคม' => 'July',
    'สิงหาคม' => 'August',
    'กันยายน' => 'September',
    'ตุลาคม' => 'October',
    'พฤศจิกายน' => 'November',
    'ธันวาคม' => 'December'
];
  1. 拆分输入的泰国日期,转换佛历(减543得到公历),再替换月份:
$thaiDate = '15 กรกฎาคม 2562';
// 拆分日、月、年三个部分
list($day, $thaiMonth, $beYear) = explode(' ', $thaiDate);

// 佛历转公历:BE年份 - 543 = AD年份
$adYear = $beYear - 543;

// 获取对应的英文月份
$englishMonth = $thaiToEnglishMonths[$thaiMonth];

// 组合成你需要的英文日期格式
$englishDate = "{$day} {$englishMonth} {$adYear}";
echo $englishDate; // 输出:15 July 2019

// 如果需要转换成DateTime对象做更多操作(比如格式化其他格式)
$dateObj = DateTime::createFromFormat('d F Y', $englishDate);
echo $dateObj->format('Y-m-d'); // 输出:2019-07-15

方法二:使用Intl扩展(更简洁,需依赖扩展)

如果你的服务器安装了PHP的intl扩展(国际化扩展),可以用这种更省心的方式,不用手动维护月份映射:

$thaiDate = '15 กรกฎาคม 2562';

// 创建泰文日期解析器,指定泰国区域和日期格式
$formatter = new IntlDateFormatter(
    'th_TH', // 泰国区域设置
    IntlDateFormatter::FULL,
    IntlDateFormatter::NONE,
    'Asia/Bangkok', // 时区
    IntlDateFormatter::GREGORIAN, // 日历类型
    'd MMMM y' // 输入的泰国日期格式:日 月份全称 年
);

// 解析泰国日期为时间戳
$timestamp = $formatter->parse($thaiDate);

// 转换为DateTime对象并输出英文格式
$date = new DateTime();
$date->setTimestamp($timestamp);
echo $date->format('d F Y'); // 输出:15 July 2019

小提醒

  • 要确保泰文月份的拼写和映射数组(或解析格式)完全一致,泰文没有大小写问题,但要注意是全称还是缩写(你的例子是全称,所以上面的代码直接能用)。
  • 佛历转公历的规则是固定的:BE年份减去543就是公历年份。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:27:15