Moment.js中波斯历(Jalali)日期比较异常:isSameOrAfter返回错误结果
Moment.js波斯历日期isSameOrAfter返回false的问题分析与解决
问题原因
核心问题在于调用isSameOrAfter()时,第二个日期字符串未指定波斯历解析格式。Moment.js默认用公历解析'1402-02-30',但该日期在公历中无效(公历2月最多29天),导致第二个参数被解析为Invalid Date,与有效的波斯历日期比较自然返回false。
解决方案
要正确比较波斯历日期,必须确保两个日期都被解析为波斯历实例:
给两个日期都指定波斯历格式
直接将第二个日期也用波斯历格式解析:const result = moment('1402-02-30', 'jYYYY-jM-jD').isSameOrAfter(moment('1402-02-30', 'jYYYY-jM-jD')); console.log(result); // 返回true结合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
相关产品推荐
相关产品推荐

