如何用JS将含泰语月份的日期转为英语格式(无需Moment.js)
泰语日期字符串转英文格式问题
我有一个日期字符串21 ต.ค. 2022 06:10 PM,希望将其转换为21 Oct 2022 06:10 PM格式。以下是我编写的JS代码:
var date = "21 ต.ค. 2022 06:10 PM"; var monthNamesThai = ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."]; // var monthNamesEng = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; var monthNamesEng = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; var d = new Date(date); console.log("Change date " + d + " = " + ('0' + d.getDate()).slice(-2) + " " + monthNamesEng[d.getMonth()] + " " + d.getFullYear());
运行该代码后得到输出:Change date Invalid Date = aN undefined NaN。请问有没有无需使用Moment.js的简易方法,将泰语月份名称转换为英语?
解决方案
核心问题在于new Date()无法识别泰语月份缩写,所以我们需要先把泰语月份替换成对应的英文月份,再处理日期。
方法代码:
const dateStr = "21 ต.ค. 2022 06:10 PM"; const thaiMonths = ["ม.ค.", "ก.พ.", "มี.ค.", "เม.ย.", "พ.ค.", "มิ.ย.", "ก.ค.", "ส.ค.", "ก.ย.", "ต.ค.", "พ.ย.", "ธ.ค."]; const engMonths = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"]; // 提取字符串中的泰语月份 const thaiMonthMatch = dateStr.match(/[ก-ฮ]\.[ก-ฮ]\./); if (thaiMonthMatch) { const thaiMonth = thaiMonthMatch[0]; const monthIndex = thaiMonths.indexOf(thaiMonth); // 替换泰语月份为英文 const engDateStr = dateStr.replace(thaiMonth, engMonths[monthIndex]); console.log(engDateStr); // 输出: 21 Oct 2022 06:10 PM // 如果需要通过Date对象做更严谨的格式化(可选) const date = new Date(engDateStr); const formattedDate = `${('0' + date.getDate()).slice(-2)} ${engMonths[date.getMonth()]} ${date.getFullYear()} ${date.toLocaleTimeString('en-US', {hour: '2-digit', minute:'2-digit', hour12: true})}`; console.log(formattedDate); } else { console.log("无法识别日期中的泰语月份"); }
说明:
- 用正则表达式
/[ก-ฮ]\.[ก-ฮ]\./匹配日期字符串中的泰语月份缩写 - 通过索引找到对应的英文月份,替换原字符串中的泰语月份
- 替换后的字符串已经符合目标格式,可以直接输出;如果需要更严谨的格式校验,再用
Date对象处理时间部分
内容的提问来源于stack exchange,提问作者SNAZ
相关产品推荐
相关产品推荐

