我尝试使用javascript减去两个日期。日期值来自表单字段。我在WordPress网站上使用Formidable Pro获取表单。
该表格是允许企业纳税的表格。税款将于每月20日到期。有时,企业可能会迟交税款,因此在表格开头时,他们会指定他们缴税的月份。
第一个日期是当前日期。它使用格式为mm / dd / yyyy的Formidable短代码填充到表单字段中。
第二个日期是根据年份和月份的条目计算的。然后将这些值与" 20"形成他们缴纳税款的当月20日的完整日期值。
如果他们在20日或之前纳税,则不会受到处罚。如果是在20日之后,则会受到处罚。我想减去日期,然后根据大于零的差异确定付款是否延迟 - 并且差异值将填充到表单字段中。
这是我一直在使用的代码。您将看到我在哪里评论了一种计算差异值并将差异值返回到表单中的方法。
使用下面的代码,脚本会返回一个" NaN"错误进入差异字段。
为什么呢?如何修复错误并报告差异?我需要知道的是它的负数还是> =零。
<script type="text/javascript">
jQuery(document).ready(function($){
$('#field_21nfg, #field_o1ns5').change(function(){
var Year = $("#field_21nfg").val();
var Month = $("#field_o1ns5").val();
$("#field_tm25b").val(Month+'/'+'20'+'/'+Year);
// var Due = $("#field_tm25b5").val();
// var Today = $("#field_1pjvu").val();
//
// var dDue = new Date('Due');
// var dToday = new Date('Today');
// var diff = Math.floor(dDue - dToday);
// $("#field_smmyr").val(diff);
var oneDay = 24*60*60*1000;
var Today_str = $("#field_1pjvu").val(); // E.g., "mm/dd/yyyy";
var Today_dt = new Date(parseInt(Today_str.substring(6), 10), // Year
parseInt(Today_str.substring(0, 2), 10) - 1, // Month (0-11)
parseInt(Today_str.substring(3, 5), 10)); // Day
var Due_str = $("#field_tm25b5").val(); // E.g., "mm/dd/yyyy";
var Due_dt = new Date(parseInt(Due_str.substring(6), 10), // Year
parseInt(Due_str.substring(0, 2), 10) - 1, // Month (0-11)
parseInt(Due_str.substring(3, 5), 10)); // Day
//var diff = Math.floor(Due_dt-Today_dt);
var diffDays = Math.round(Math.abs((Today_dt.getTime() - Due_dt.getTime())/(oneDay)));
$("#field_smmyr").val(diffDays);
});
});
</script>
&#34; 1pjvu&#34;是今天日期字段的关键
&#34; 21nfg&#34;是用户给出的结算周期的年份值字段。
&#34; o1ns5&#34;是用户给出的结算周期字段的月份值字段。
&#34; tm25b&#34;是连接到期日:在上述字段中给出的月份的第20个。
&#34; smmyr&#34;是差异领域的关键。
2016年4月19日更新
谢谢大家的帮助。如果你不能告诉我,我不会认识JS,但是在我走的时候我正在乱哄哄的。经过多次摸索,我得到了它的工作。这是我的最终代码:
<script type="text/javascript">
jQuery(document).ready(function($){
$('#field_21nfg, #field_o1ns5').change(function(){
var Year = $("#field_21nfg").val(); //Collect value from Filing Period Year form field
var Month = $("#field_o1ns5").val();//Collect value from Filing Period Month form field
var Day = 20; //Due date for filing tax return
var DueDate = Month+'/'+Day+'/'+Year;
$("#field_tm25b").val(DueDate); //Populate "Due Date" form field with due date generated above
function parseMDY(s) {
var b = s.split(/\D/);
return new Date(b[2], b[0]-1, b[1]);
}
var Today = $("#field_1pjvu").val(); //Collect Value from Today's Date form field
if (DueDate > Today) {
$("#field_smmyr").val(1); //Returns true/1 for on or before due date
} else {
$("#field_smmyr").val(0); //Returns false/0 for after due date
}
});
});
</script>
答案 0 :(得分:0)
您可以尝试使用ms中的时间戳而不是实际格式化的日期。使用JS你可以这样做:
var date = new Date(ts*1000);
var d = date.getDate();
var m = date.getMonth() + 1;
var y = date.getFullYear();
var formatted = d + '/' + m + '/' + y;
将您的2个日期转换为时间戳将允许您从另一个中减去一个,然后将其转换回格式化的日期:
{{1}}
答案 1 :(得分:0)
你正在使生活变得更加艰难。要以m / d / y格式解析日期字符串,请使用如下所示的简单函数。
如果您想使用<
或>
整天比较日期,则可以只比较它们。但即使关系比较运算符将日期与数字进行比较,==
和===
运算符也不会更明确地比较时间值。
function parseMDY(s) {
var b = s.split(/\D/);
return new Date(b[2], b[0]-1, b[1]);
}
var a = '2/29/2016';
var b = '12/31/2015';
document.write(parseMDY(a) + '<br>' + parseMDY(b) + '<br>');
document.write('Is ' + a + ' before ' + b + '? ' +
(parseMDY(a).getTime() < parseMDY(b).getTime())
);
&#13;
如果您想与&#34;今天&#34;进行比较,请不要忘记将小时数设置为零:
var today = new Date();
today.setHours(0,0,0,0);