我有两个文本框,一个用于年份,一个用于月份。如果在月文本框中输入19,则在年文本框中应将其计算为1.7,如果在年文本框中键入1.7,则应在月文本框中输入19。我需要一个基本上可以计算出来的函数。
答案 0 :(得分:0)
月份->年份
年份值将表示为<Year>.<Month>
,而不是
几年的时间;例如1.7 years
表示1年7个月,而不是
20.4个月
年份->月份
给出了相同的考虑。小数年转换为年和月;例如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" />