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

JavaScript日期在阿拉伯语区域环境下显示异常如何解决

解决方案

问题根因

  • ar-XB是用于国际化测试的伪区域代码,并非阿拉伯语国家正式使用的区域标识,默认日期排序规则和正式阿拉伯语区域存在差异
  • 阿拉伯语属于RTL(从右到左)书写体系,原生格式化返回的字符串会携带不可见的RTL控制字符,且阿拉伯语地区默认的日期排序为日/月/年,和美国地区默认的月/日/年规则不同

可选解决方案

方案1:使用正式阿拉伯语区域码,获取当地标准格式

替换ar-XB为阿拉伯语国家正式区域码(比如沙特ar-SA、埃及ar-EG),可按需指定数字体系:

console.log(
  new Intl.DateTimeFormat("ar-SA", {
    day: '2-digit',
    month: '2-digit',
    year: 'numeric',
    numberingSystem: 'arab' // 指定使用阿拉伯语数字,填latn则使用拉丁数字
  }).format(new Date())
);

输出为符合对应阿拉伯语国家使用习惯的标准日期格式。

方案2:强制自定义日期顺序,不受区域默认规则影响

如果需要固定日期排序(比如和en-US保持一致的月/日/年顺序),可以用formatToParts方法提取日期字段自行拼接:

const fmt = new Intl.DateTimeFormat("ar", {
  day: '2-digit',
  month: '2-digit',
  year: 'numeric',
  numberingSystem: 'latn'
});
const parts = fmt.formatToParts(new Date());
// 按 月/日/年 顺序拼接
const formattedDate = `${parts.find(p => p.type === 'month').value}/${parts.find(p => p.type === 'day').value}/${parts.find(p => p.type === 'year').value}`;
console.log(formattedDate);

该方案完全不受区域默认排序规则影响,可按需自定义拼接逻辑。

方案3:清理RTL控制字符

如果返回的字符串中不可见的RTL控制字符影响后续处理,可以直接过滤掉:

const rawDate = new Intl.DateTimeFormat("ar", {
  day: '2-digit',
  month: '2-digit',
  year: 'numeric'
}).format(new Date());
const cleanDate = rawDate.replace(/\u200f/g, '');
console.log(cleanDate);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:06:01