将年份转换成月份,将月份转换成年份

时间:2020-04-05 15:23:10

标签: javascript jquery

我有两个文本框,一个用于年份,一个用于月份。如果在月文本框中输入19,则在年文本框中应将其计算为1.7,如果在年文本框中键入1.7,则应在月文本框中输入19。我需要一个基本上可以计算出来的函数。

1 个答案:

答案 0 :(得分:0)

年月转换

条件

  1. 月份->年份
    年份值将表示为<Year>.<Month>,而不是 几年的时间;例如1.7 years表示1年7个月,而不是 20.4个月

  2. 年份->月份
    给出了相同的考虑。小数年转换为年和月;例如1.12 years表示1年12个月,而不是1年1.44个月

说明

下面的实现包括将年显示为字符串,将月显示为数值。可以通过将月份数除以12来从月份中获得年份。其余月份是通过输入月份并取剩余的12(模12)来找到的。这些可以通过字符串运算符组合。

注意: 考虑1.12实际上大于1.9,这一点非常重要。这是请求的符号,而不是首选的符号。如果有人要继续走这条路,我可能会鼓励使用1.09(而不是1.9)来表示1年9个月。这样,很明显1.12大于1.09。此外,它将允许在更大的月份内输入;例如,0.20年应转换为20个月,但是由于.2.20是同义词,因此0.20仅转换为2个月。

示例

您可以添加事件侦听器并计算您认为合适的方式:

year.addEventListener('keyup', function(e){
  let fraction = parseFloat(this.value) - (this.value|0);
  let months = Math.round(fraction*100)
  if (months % 10 == 0) months = months/10
  month.value = parseInt(this.value) * 12 + months

  if (this.value == '')
    month.value = ''
});

month.addEventListener('keyup', function(e){
  let years  = parseFloat(this.value)
  year.value = parseInt(years / 12) + '.' + parseInt(years%12)
  
  if (this.value == '')
    year.value = ''
});

document.addEventListener('click', function(e){
  if(e.target.type == 'text')
    e.target.value = ''
});
Year: <input type="text" id="year" />
Month: <input type="text" id="month" />