gpt4 book ai didi

Javascript 日期计算返回不正确的值

转载 作者:行者123 更新时间:2023-12-02 23:18:40 25 4
gpt4 key购买 nike

我有一个 javascript 日期计算器,有时有效,有时无效。我已通读How do I get the number of days between two dates in JavaScript?但我不确定在哪里实现任何建议,因为在我看来,这篇文章中的日期是在代码内部预先确定的,而不是通过输入确定的。

例如,如果您输入日期2019年10月1日,您将得到以下结果:

45 天:2019 年 11 月 14 日,星期四

180 天:2020 年 3 月 29 日星期日

但是,如果您输入 2019 年 12 月 1 日的日期,您将得到以下结果:

45 天:2020 年 1 月 15 日星期三

180 天:2020 年 5 月 29 日星期五

这不可能是正确的,因为 12 月有 31 天。 31 + 15 = 46?大多数月份都会发生某种误判。

(function ($) {
var weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];

var afterTime = function (time, days) {
time = time + (24 * 60 * 60 * 1000) * days;
return time;
};

var getDate = function () {
var yy = $('input#year').val();
var mm = $('select#month').val();
var dd = $('input#day').val();
var wd;

if (yy.trim().length === 0 || mm.trim().length === 0 || dd.trim().length === 0) {
return;
}

var startDate = new Date(yy, mm, dd);
var resultDate;

resultDate = new Date();
resultDate.setTime(afterTime(startDate.getTime(), 45));
yy = resultDate.getFullYear();
mm = resultDate.getMonth();
dd = resultDate.getDate();
wd = resultDate.getDay();
$('#dateAfter45').html('<span>Your 45 Days from now ends on:</span> ' + weekdays[wd] + ', ' + months[mm] + ' ' + dd + ', ' + yy);

resultDate = new Date();
resultDate.setTime(afterTime(startDate.getTime(), 180));
yy = resultDate.getFullYear();
mm = resultDate.getMonth();
dd = resultDate.getDate();
wd = resultDate.getDay();
$('#dateAfter180').html('<span>Your 180 Days from now ends on:</span> ' + weekdays[wd] + ', ' + months[mm] + ' ' + dd + ', ' + yy);
};

$(document).ready(function () {
$('input#year').change(function () {
getDate();
});
$('input#day').change(function () {
getDate();
});
$('select#month').change(function () {
getDate();
});
});

})(jQuery);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="dateselector">
<div class="start-date">
<form class="form">
<div class="form-row align-items-center">
<div class="col-auto">
<!--label for="month">Month</label-->
<select name="month" id="month" class="form-control">
<option value="" disabled selected>- Select a Month -</option>
<option value="0">January</option>
<option value="1">February</option>
<option value="2">March</option>
<option value="3">April</option>
<option value="4">May</option>
<option value="5">June</option>
<option value="6">July</option>
<option value="7">August</option>
<option value="8">September</option>
<option value="9">October</option>
<option value="10">November</option>
<option value="11">December</option>
</select>
</div>
<div class="col-auto">
<!--label for="day">Day</label-->
<input type="text" name="day" id="day" class="form-control" placeholder="Day" maxlength="2">
</div>
<div class="col-auto">
<!--label for="day">Year</label-->
<input type="text" name="year" id="year" class="form-control" placeholder="Year" maxlength="4">
</div>
<div class="col-auto">
<!--label for="day">Year</label-->
<span class="butn hvr-sweep-to-top">Calculate</span>
</div>
</div>
</form>
</div>
<div class="result-date">
<h4 id="dateAfter45"></h4>
<h4 id="dateAfter180"></h4>
</div>
</div>

最佳答案

45 是 31 + 14。12 月 1 日后 31 天是 1 月 1 日,1 月 1 日后 14 天是 1 月 15 日。

结果是正确的。跨越月份边界的日期算术会减少 1,因为月份中没有第 0 天。

在第一种情况下,您得到 11 月 14 日的原因是因为夏令时在 10 月的某个时间发生了变化。您的 afterTime() 函数将所有日子视为 24 小时长,但当 DST 结束时,我们会在这一天添加一个额外的小时。因此,您将从 10 月 1 日 00:00:0011 月 14 日 23:00:00,而不是 11 月 15 日 00:00:00 >.

使用 Date 类中的内置日期算术,它会自动对此进行调整。

resultDate.setTime(afterTime(startDate.getTime(), 45));

关于Javascript 日期计算返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57048706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com