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

Node.js中toLocaleString设置es-MX未返回预期墨西哥西班牙语日期格式

问题原因
  • Node.js 默认内置的ICU(国际化组件)为精简版本,仅包含英文本地化规则,调用toLocaleString指定非英语区域(如es-MX墨西哥西班牙语)时会自动降级到英文输出,所以得到Apr 3, 1980的结果。
  • 浏览器内置全量ICU本地化数据,因此同一段代码在客户端运行可以正常返回预期格式。
解决方案

方案1:安装全量ICU依赖

无需改动现有代码逻辑,补充Node.js缺失的本地化数据即可:

  1. 安装依赖:
npm install full-icu
  1. 运行代码时指定ICU数据目录:
# 单次运行指定参数
node --icu-data-dir=node_modules/full-icu 你的脚本文件名.js

# 也可以设置环境变量避免每次加参数
# Windows 环境
set NODE_ICU_DATA=node_modules/full-icu
# Linux/Mac 环境
export NODE_ICU_DATA=node_modules/full-icu

配置完成后原有代码即可正常输出西班牙语格式,如需横线分隔的3-abr-1980格式,可以额外增加字符串处理:

const birthdate = bdate.toLocaleString('es-MX', { 
  month: 'short', 
  year: 'numeric', 
  day: 'numeric'
}).replace(/ /g, '-').toLowerCase();

方案2:使用第三方日期格式化库

如果不想修改运行配置,可以选择自带完整本地化能力的第三方日期库,比如date-fns:

  1. 安装依赖:
npm install date-fns @date-fns/locale
  1. 代码示例:
const { format } = require('date-fns');
const { es } = require('@date-fns/locale/es');

const bdate = new Date(1980, 4-1, 3);
const birthdate = format(bdate, 'd-MMM-yyyy', { locale: es }).toLowerCase();
console.log(birthdate); // 直接输出 3-abr-1980

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 13:15:03