Laravel项目中persianDate的edate1返回NaN/NaN/NaN的原因及解决方法
问题
我在Laravel项目中编写了如下JavaScript代码片段:
$('#deadline').change(function() { const dval =parseInt($('#deadline').val()); const startdate=document.getElementById("startdate").value; const startdateToEnglish= startdate.toEnglishDigit(); console.log("startdate: "+startdate+" interval: "+dval); var inputF = document.getElementById("enddate"); edate=new persianDate().format(); edate1=new persianDate([startdateToEnglish]).add('days', dval).format('YYYY/MM/DD'); console.log("startdateToEnglish: "+startdateToEnglish); edate2=new persianDate([1402,08,01]).add('days', dval).format('YYYY/MM/DD'); inputF.value = edate; console.log("edate1: "+edate1+" edate2: "+edate2 ); });
控制台输出如下:
startdate: ۱۴۰۲,۰۸,۱ interval: 1 startdateToEnglish: 1402,08,01 edate1: NaN/NaN/NaN edate2: ۱۴۰۲/۰۸/۰۲
edate1与edate2逻辑类似,为何edate1的值为NaN/NaN/NaN?如何让edate1得到与edate2一致的输出?
原因与解决方案
原因
创建edate1时,你传给persianDate的是包含字符串"1402,08,01"的数组,persianDate无法解析这种格式的参数。而edate2传入的是数字类型的年、月、日组成的数组[1402,08,01],完全符合persianDate的构造要求,所以能正常计算。
解决方案
需要把startdateToEnglish按逗号分割,转换成数字数组后再传给persianDate:
// 分割字符串并转为数字数组 const dateParts = startdateToEnglish.split(',').map(part => parseInt(part, 10)); // 使用数字数组创建persianDate实例 edate1 = new persianDate(dateParts).add('days', dval).format('YYYY/MM/DD');
修改后的完整代码:
$('#deadline').change(function() { const dval = parseInt($('#deadline').val()); const startdate = document.getElementById("startdate").value; const startdateToEnglish = startdate.toEnglishDigit(); console.log("startdate: "+startdate+" interval: "+dval); var inputF = document.getElementById("enddate"); edate = new persianDate().format(); // 修复edate1的创建逻辑 const dateParts = startdateToEnglish.split(',').map(part => parseInt(part, 10)); edate1 = new persianDate(dateParts).add('days', dval).format('YYYY/MM/DD'); console.log("startdateToEnglish: "+startdateToEnglish); edate2 = new persianDate([1402,08,01]).add('days', dval).format('YYYY/MM/DD'); inputF.value = edate; console.log("edate1: "+edate1+" edate2: "+edate2 ); });
修改后edate1就能和edate2一样正常输出计算后的日期。
内容的提问来源于stack exchange,提问作者jason bikari
相关产品推荐
相关产品推荐

