首页 > 解决方案 > 根据PDF表单中的独立表单域计算日期

问题描述

我想计算一个恰好在 PDF 表单的单独日期字段中选择的日期前 5 天的日期。例如,如果我在 中选择“2021 年 7 月 10 日” Date1,我想Date2自动填充“2021 年 7 月 5 日”。

我知道如何从字段 1 中获取日期并用它填充字段 2,并且我知道如何进行 5 天(前)的计算。我真正苦苦挣扎的部分是将这两件事放在文档中。如果我想从当前日期开始计算 5 天前,我可以做到这一点,因为它在整个地球和互联网上都有记录,哈哈。但是从另一个字段中的选定日期计算 5 天前让我陷入了循环。

我不太精通 JavaScript,但我也想知道这是否是一个解决方案:

//turning this piece of code    
event.value=this.getField("Date1").value;

//into this piece of code
var d = this.getField("Date1").value;

由于我不需要第二个日期字段来实际填充第一个日期字段值,我想知道它是否像将第一个字段值转换为变量然后将变量放入“自定义计算”下的计算脚本中一样简单脚本”在表单域的属性中。

标签: javascriptformsdateacrobat

解决方案


虽然我无法帮助您设置/获取 PDF 表单项,但这里是如何使用您的日期字符串格式“MMM DD,YYYY”在 JavaScript 中从日期中添加或减去天数:

const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
  'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'
];

// convert "MMM, DD, YYYY" string to Date object
function makeDateFromStr(str) {
  const strNoComma = str.split(',').join('');
  const [monthStr, day, year] = strNoComma.split(' ');
  const monthIndex = months.indexOf(monthStr);
  return new Date(year, monthIndex, day);
}

// add/subtract number of days to Date object,
// returning new date
function addDaysToDate(date, addDays) {
  const currDays = date.getDate();
  const newDate = new Date(date.getTime());
  newDate.setDate(currDays + addDays);
  return newDate;
}

// convert Date object to string "MMM DD, YYYY"
function myDateFormat(date) {
  const monthStr = months[date.getMonth()];
  const day = date.getDate();
  const year = date.getFullYear();
  return `${monthStr} ${day}, ${year}`;
}

const date1Str = "Jul 10, 2011";
console.log(`date1Str: "${date1Str}"`);

const date1 = makeDateFromStr(date1Str);
console.log('date1:',date1.toISOString());

const date2 = addDaysToDate(date1, -5);
console.log('date2:',date2.toISOString());

const date2Str = myDateFormat(date2);
console.log(`date2Str: "${date2Str}"`);


推荐阅读