如何使用PHP将泰国日期(15 กรกฎาคม 2562)转换为英文日期?
解决PHP中泰国日期转英文日期的问题
我之前也碰到过类似的需求,泰国日期用的是佛历(BE),月份是泰文全称,转换的核心就是月份映射和佛历转公历这两步,下面给你两种实用的实现方法:
方法一:手动映射月份(无需额外扩展)
这种方法不依赖任何PHP扩展,兼容性拉满,适合所有运行环境:
- 先定义泰文月份到英文月份的映射数组,确保每个泰文全称都对应正确的英文月份:
$thaiToEnglishMonths = [ 'มกราคม' => 'January', 'กุมภาพันธ์' => 'February', 'มีนาคม' => 'March', 'เมษายน' => 'April', 'พฤษภาคม' => 'May', 'มิถุนายน' => 'June', 'กรกฎาคม' => 'July', 'สิงหาคม' => 'August', 'กันยายน' => 'September', 'ตุลาคม' => 'October', 'พฤศจิกายน' => 'November', 'ธันวาคม' => 'December' ];
- 拆分输入的泰国日期,转换佛历(减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
相关产品推荐
相关产品推荐

