Я пытаюсь использовать javascript для вычитания двух дат. Значения даты берутся из полей формы. Я использую Formidable Pro на сайте WordPress для формы.
Форма позволяет бизнесу платить налоги. Налог уплачивается 20-го числа каждого месяца. Иногда бизнес может платить налоги с опозданием, поэтому в начале формы они указывают, за какой месяц они платят налоги.
Первая дата – это текущая дата. Он заполняется в поле формы с помощью короткого кода 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>
"1pjvu" - ключ поля сегодняшней даты
«21nfg» — это поле значения года расчетного периода, заданное пользователем.
«o1ns5» — это поле значения месяца в поле расчетного периода, заданное пользователем.
«tm25b» — объединенная дата выполнения: 20-е число месяца, указанного в поле выше.
"smmyr" - это ключ поля различия.
ОБНОВЛЕНИЕ 19 апреля 2016 г.
Спасибо за вашу помощь. Если вы не можете сказать, я не знаю 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>