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

Moment.js中波斯历(Jalali)日期比较异常:isSameOrAfter返回错误结果

Moment.js波斯历日期isSameOrAfter返回false的问题分析与解决

问题原因

核心问题在于调用isSameOrAfter()时,第二个日期字符串未指定波斯历解析格式。Moment.js默认用公历解析'1402-02-30',但该日期在公历中无效(公历2月最多29天),导致第二个参数被解析为Invalid Date,与有效的波斯历日期比较自然返回false。

解决方案

要正确比较波斯历日期,必须确保两个日期都被解析为波斯历实例:

  1. 给两个日期都指定波斯历格式
    直接将第二个日期也用波斯历格式解析:

    const result = moment('1402-02-30', 'jYYYY-jM-jD').isSameOrAfter(moment('1402-02-30', 'jYYYY-jM-jD'));
    console.log(result); // 返回true
    
  2. 结合startOf('day')比较纯日期(忽略时间)
    如果需要仅比较日期部分,对两个波斯历日期都调用startOf('day')即可:

    const date1 = moment('1402-02-30', 'jYYYY-jM-jD').startOf('day');
    const date2 = moment('1402-02-30', 'jYYYY-jM-jD').startOf('day');
    const result = date1.isSameOrAfter(date2);
    console.log(result); // 返回true
    

前置条件检查

确保项目已正确安装并引入moment-jalaali插件(原生Moment.js不支持波斯历):

  • 安装依赖:
    npm install moment-jalaali
    
  • 代码中引入:
    // CommonJS
    const moment = require('moment-jalaali');
    // ES模块
    import moment from 'moment-jalaali';
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 10:32:35