当前位置: 首页 > 知识库问答 >
问题:

使用Jquery动态减去日期、月份和年份,并将数据作为天

燕承安
2023-03-14

我想从另一个输入年份中减去一个用户输入年份,但到目前为止我运气不好。

我将创建一个可以播放的片段。

我想做的是使一个输入字段(A)仅输入年份。然后选择任何日期并从输入年份(A)中减去它(日期和月份是固定的,如31.03。input_year)...

$(document).on('change', '#year_select', function() {
  calculate();
});

$(document).on('change', '#new_date', function() {
  calculate();
});

function calculate() {
  var year_enter = $('#year_select').val();
  var current_year = year_enter+'-03-31';
  var new_date = $('#new_date').val();
  if(year_enter != '') {
    //alert(current_year);
  }
  if(new_date != '') {
    //alert(new_date);
    
    var total = new_date - current_year;
    $('#answer').val(total);
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p>Enter years (A)</p>
<input type="number" id="year_select" min="0" placeholder="Eg: 2018, 2001">

<br>

<p>Select Date (B)</p>
<input type="date" id="new_date">


<p>(A - B)</p>

<input type="text" readonly id="answer">

我总是得到NaN值,我想我的减法是不正确的。我试着使用setDate()、getDate()等,但我不理解逻辑。

提前感谢...


共有2个答案

汤念
2023-03-14

日期可能很难处理,但是时刻库让它变得容易多了。在我的示例中,我将两个字段的输入解析为时刻对象,并计算它们在持续时间上的差异。您可以在Moment.js文档中阅读更多关于持续时间的信息。

代码片段差异以天表示。如果您想将其更改为月或年,请更新以下行。

log(Math.round(duration.as('days')) + 'days');

您还可以包括几个if语句,以检查差异是否为一年,以年为单位显示结果。如果没有,则有一个完整的月份,用月份表示结果,依此类推。

这是一个以天为单位的工作示例。

$(document).on('change', '#year_select', function() {
  calculate();
});

$(document).on('change', '#new_date', function() {
  calculate();
});

function calculate() {
  var yearSelect = document.querySelector('#year_select').value;
  var newDate = document.querySelector('#new_date').value;
  var first_date = new window.moment('31-03-' + yearSelect, 'DD-MM-YYYY');
  var second_date = new window.moment(newDate, 'YYYY-MM-DD');

  if(yearSelect.length !== 4 || newDate === '') {
    log('');
    return;
  }
  
  var duration = window.moment.duration(first_date.diff(second_date));

  log(Math.round(duration.as('days')) + 'days');
}

function log(value) {
  var answer = document.querySelector('#answer');
  answer.value = value;
}
<script src="https://cdn.jsdelivr.net/momentjs/2.10.6/moment-with-locales.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p>Enter years (A)</p>
<input type="number" id="year_select" min="0" placeholder="Eg: 2018, 2001">

<br>

<p>Select Date (B)</p>
<input type="date" id="new_date">


<p>(A - B)</p>

<input type="text" readonly id="answer">
巴宏恺
2023-03-14

您可以使用new Date()将它们转换为日期以进行算术运算

$(document).on('change', '#year_select', function() {
  calculate();
});

$(document).on('change', '#new_date', function() {
  calculate();
});

function calculate() {
  var year_enter = $('#year_select').val();
  var current_year = new Date(year_enter + '-03-31');
  var new_date = new Date($('#new_date').val());
  if (year_enter != '') {

  }
  if (new_date != '' && year_enter != '') {

    if (current_year < new_date) {
      $('#answer').val('A must be greater than B');
      return;
    }

    var total = Math.round(Math.abs((current_year.getTime() - new_date.getTime()) / (24*60*60*1000)));

    $('#answer').val(total);
  }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<p>Enter years (A)</p>
<input type="number" id="year_select" min="0" placeholder="Eg: 2018, 2001"><span style="opacity: 0.5;">&nbsp;this currently has fixed -month-day(-03-31) </span>

<br>

<p>Select Date (B)</p>
<input type="date" id="new_date">


<p>(A - B)</p>

<input type="text" readonly id="answer">
 类似资料:
  • 问题内容: 我需要用mysql减去1个月零4天,我看到命令 完美适用于1个月但1个月零4天,使用31天对于每个月带来30、29、28的每月无效。我无法添加31 + 4,30 + 4,等等 问题答案: 使用 [docs] 像:

  • 问题内容: 我正在尝试将包含2007年12月1日等各个部分的日期转换为SQL Server 2005中的日期时间。我尝试了以下方法: 但这会导致日期错误。将三个日期值转换为正确的日期时间格式的正确方法是什么? 问题答案: 假设全部,如何:

  • 我在利用这一刻。js以特定的形式显示时间- 上面的代码以下面的格式显示日期和时间 0年0月1天37小时 我需要展示这样的东西 0年0月1天13小时 我已经尝试使用from现在和from https://momentjs.com/docs/#/displaying/from/ 但无法获得输出。我怎样才能做到这一点。

  • 如果在程序中有人给我天数(ab=“days”),我需要将变量“days”设置为相同的数字(“val”中的值),如果有人给我月份(ab=“months”),那么我需要将其转换为天(val中的值),如果有人给我年(ab=“years”),那么我需要将其转换为天(val中的值)。ie如果用户在变量“ab”中指定了值的类型(即是月、年或日期)和变量“val”中的天数(天/月/年),我需要在变量“天”中获得

  • 问题内容: 我有一张桌子,看起来像: 我想对过去3个月(不包括当月)的数量求和。我的where子句当前看起来像: 它有效,但丑陋和侮辱。关于使其更漂亮有什么建议吗?非常感谢! 问题答案: 没什么好… 但是,可以将嵌套的DATEADD用作计算列和索引列 这使