Преобразование полей год, месяц и день в дату для выполнения математики

#javascript #acrobat

#javascript #acrobat

Вопрос:

Все, у меня есть форма с тремя отдельными текстовыми полями. Год, месяц и день. Я пытаюсь понять, как объединить их и создать дату (формат даты не имеет значения), а затем вычесть ее из другой даты, чтобы найти количество дней между ними.

Проблема в том…Я новичок в JavaScript и не могу найти в Интернете ничего, что можно было бы использовать в качестве учебного пособия.

Если бы кто-нибудь мог помочь мне начать, я был бы очень признателен.

Мои текстовые поля буквально («Год», «Месяц» и «День»). Я предполагаю, что есть способ объединить три числа, а затем преобразовать в дату? Ниже я нахожусь, и я знаю, что это далеко, так что…

 var cYar = this.getField("Year").value
var cMon = this.getField("Month").value
var cDay = this.getField("Day").value
var cSrt = concat(cYar,'-',cMon,'-',cDay)as date
var cYar2 = this.getField("lveyear").value
var cMon2 = this.getField("lvemon").value
var cDay2 = this.getField("lveday").value
var cEnd = concat(cYar2,'-',cMon2,'-',cDay2)as date

this.getField("numdays")event.value = (cEnd-Csrt) 1
  

Заранее спасибо…

Ответ №1:

Date Конструктор поддерживает все ваши данные. Обратитесь к MDN

 new Date(year, monthIndex[, day[, hours[, minutes[, seconds [, milliseconds]]]]])
  
  • Объекты даты поддерживают математические операции, которые работают с использованием метки времени эпохи.

  • Обратите внимание, что monthIndex начинается с January = 0

 const convertToDate = (yyyy, mm, dd) => new Date(yyyy, mm - 1, dd);
convertToDate(2020, 09, 19) - convertToDate(2020, 09, 18)
  

Вывод: 86400000 (24 часа в миллисекундах)

Если вы пытаетесь получить количество дней:

 const dateA = convertToDate(cYar, cMon, cDay);
const dateB = convertToDate(cYar2, cMon2, cDay2);
const numDays = parseInt((dateB - dateA) / 86400000);
  

Вот скрипка: https://jsfiddle.net/d2v8hpc1 /

Комментарии:

1. OK…so Я вижу оператор const, но как мне объединить три поля, чтобы создать дату, которую он будет использовать в качестве новой даты? Могу ли я просто использовать concat для выполнения этого внутри Date()? Нужно ли мне устанавливать переменные в виде строк, а не просто значение поля?

2. нет, этот подход не касается манипулирования строками.

3. Хорошо … я думаю, мне нужна еще немного помощи. Извините, что так медленно, но я парень старой школы VB. Этот JavaScript сводит меня с ума! лол

4. Используя предоставленный вами код, я предполагаю, что я объявляю свои переменные и добавляю в ваш текст. Поместите это в действие «При размытии» в записи «Последний день», и после выхода из этого поля оно должно вычислить и заполнить поле «количество дней». Должен ли я на самом деле создавать даты и помещать их в текстовое поле или я могу просто использовать их в коде самостоятельно для выполнения математики? Как я могу использовать даты, если не присваивать их (dateA и dateB) переменным? И если я назначу, как мне это сделать? Можете ли вы объявить переменную без = «something»?

5. Я нашел учебник по работе с датами в Acrobat: я здесь сейчас … все еще не работает. var cYar = this.getField(«Год»).значение; var cMon = this.getField(«Месяц»).значение; var cDay = this.getField(«День»).значение; var cYar2 = this.getField(«lveyear»).значение; var cMon2 = this.getField(«lvemon»).value; var cDay2 = this.getField(«lveday»).value; var dateA = новая дата (cYar, cMon, cDay); var dateB = новая дата (cYar2, cMon2, cDay2); var diff = dateB.getTime() — dateA.getTime(); var OneDay = 24 * 60 * 60 * 1000 ; var cNumdays = diff/OneDay; this.getField(«numDays»).value = cNumdays

Ответ №2:

Вы можете искать описание Date объекта, который является частью ядра JavaScript.

Вы также должны посмотреть в документации Acrobat JavaScript на методы util.scand() и util.printd() .