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

如何用JavaScript/jQuery实现dd MMM, yyyy格式的本地化日期格式化?

好问题!确实toLocaleDateString()虽然能帮我们做本地化日期输出,但它默认的格式顺序没法直接满足dd MMM, yyyy的要求(比如英文环境会输出Jan 30, 2019而不是你要的30 Jan, 2019)。这里给你几种纯JavaScript的实现方式,完全不需要依赖Angular或者其他重型框架,jQuery环境下也能直接用:

方法1:手动拼接本地化部件

我们可以单独获取本地化后的日、短月、年三个部分,再按想要的顺序拼接起来。这种方式简单直接,而且能完美匹配你给出的各个语言示例:

function formatCustomLocalDate(timestamp, userLang = window.userLang) {
  const date = new Date(parseInt(timestamp));
  
  // 分别获取本地化的日、短月、年
  const localizedDay = date.toLocaleDateString(userLang, { day: 'numeric' });
  const localizedMonth = date.toLocaleDateString(userLang, { month: 'short' });
  const localizedYear = date.toLocaleDateString(userLang, { year: 'numeric' });
  
  // 按目标格式拼接
  return `${localizedDay} ${localizedMonth}, ${localizedYear}`;
}

// 使用示例
const timestamp = '1548806400000'; // 对应2019-01-30
console.log(formatCustomLocalDate(timestamp));
// 英文(en): "30 Jan, 2019"
// 法语(fr): "30 janv., 2019"
// 中文(zh-CN): "30日 1月, 2019年"

方法2:用Intl.DateTimeFormat.formatToParts()拆分部件

如果需要更精细地控制日期部件(比如处理一些特殊语言的格式细节),可以用Intl.DateTimeFormat的formatToParts()方法,它会把日期拆成结构化的部件数组,我们提取需要的部分再拼接:

function formatDateWithParts(timestamp, userLang = window.userLang) {
  const date = new Date(parseInt(timestamp));
  const formatter = new Intl.DateTimeFormat(userLang, {
    day: 'numeric',
    month: 'short',
    year: 'numeric'
  });
  
  // 获取结构化的日期部件数组
  const parts = formatter.formatToParts(date);
  
  // 提取日、月、年部件的值
  const day = parts.find(part => part.type === 'day').value;
  const month = parts.find(part => part.type === 'month').value;
  const year = parts.find(part => part.type === 'year').value;
  
  return `${day} ${month}, ${year}`;
}

// 使用示例
console.log(formatDateWithParts(timestamp, 'fr')); // 输出: "30 janv., 2019"

jQuery环境下的封装(可选)

如果你的项目用了jQuery,也可以把这个功能封装成一个简单的工具方法:

$.extend({
  formatLocalDate: function(timestamp, userLang = window.userLang) {
    const date = new Date(parseInt(timestamp));
    const day = date.toLocaleDateString(userLang, { day: 'numeric' });
    const month = date.toLocaleDateString(userLang, { month: 'short' });
    const year = date.toLocaleDateString(userLang, { year: 'numeric' });
    return `${day} ${month}, ${year}`;
  }
});

// 使用示例
const formattedDate = $.formatLocalDate(timestamp, 'zh-CN');
console.log(formattedDate); // 输出: "30日 1月, 2019年"

这几种方式都能实现和Angular DatePipe类似的效果,而且完全基于原生JavaScript API,轻量又灵活。

内容的提问来源于stack exchange,提问作者J.K.A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:48:45