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

如何在Luxon中实现Moment.js里LLL格式的时间格式化?

从Moment.js迁移到Luxon实现相同时间格式化效果

问题场景

原本使用Moment.js实现以下时间格式化:

moment().format('LLL')    // 输出示例:June 9 2014 9:32 PM
moment().format('D MMM YYYY[,] HH[:]mm z')

切换到Luxon后,发现luxon.DateTime.toFormat('LLL')仅返回本地化月份缩写,无法得到Moment中LLL对应的完整日期时间格式,同时需要验证自定义格式的转换正确性。

解决方案

1. 替代Moment.js的LLL格式

Moment的LLL是本地化中等日期时间格式,Luxon不支持直接用toFormat('LLL')实现,需要使用toLocaleString并指定对应格式:

方法一:使用预定义本地化格式

Luxon提供了预定义的格式常量,DATETIME_MED完全匹配MomentLLL的效果:

luxon.DateTime.now().toLocaleString(luxon.DateTime.DATETIME_MED)
// 输出示例:June 9, 2014 9:32 PM(根据当前本地化设置,部分地区自动省略逗号)

方法二:自定义本地化选项

如果需要严格匹配无逗号的格式(如June 9 2014 9:32 PM),可以手动指定格式选项:

luxon.DateTime.now().toLocaleString({
  month: 'long',
  day: 'numeric',
  year: 'numeric',
  hour: 'numeric',
  minute: 'numeric',
  formatMatcher: 'basic' // 避免自动添加分隔符
})

2. 自定义格式D MMM YYYY[,] HH[:]mm z的转换

Luxon的toFormat令牌与Moment大部分兼容,只需调整少量差异:

  • Moment的D(月份日)对应Luxon的d
  • Moment的YYYY(4位年)对应Luxon的yyyy

最终代码:

// 本地时区格式
luxon.DateTime.now().toFormat('d MMM yyyy[,] HH[:]mm z')
// 输出示例:9 Jun 2024 14:32 CST

// UTC时区格式
luxon.DateTime.utc().toFormat('d MMM yyyy[,] HH[:]mm z')
// 输出示例:9 Jun 2024 06:32 UTC

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 02:05:20