gpt4 book ai didi

十月的 Javascript 天数

转载 作者:行者123 更新时间:2023-11-29 15:40:07 27 4
gpt4 key购买 nike

我在计算利息天数时有一个有趣的错误。我每天检查并检查今天是哪一天(1 到 31)。现在我发现了一个问题:10月计数不正常。这意味着 27 号是 26 号,或者 29 号是 28 号。这是一个众所周知的问题吗?也许问题出在我的代码中,但是,因为它在另一个时期有效,所以似乎没问题。

    <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<script type="text/javascript">
function berecheZinstage() {
//eingabe von den Feldern holen
var strVon = txtVonDatum.value;
var strBis = txtBisDatum.value;
//label um das Resultat anzuzeigen
var resultatTage = document.getElementById("lblTage");
var resultatZinsTage = document.getElementById("lblZinstage");
//tag als Milisekunden
var tagMs = 86400000;
var monatCount;
//Eingabeformat umwandeln für die Berechung
strVon = strVon.replace(/-/g, "/");
strBis = strBis.replace(/-/g, "/");
var vonDatum = new Date(strVon);
var bisDatum = new Date(strBis);
var zinsTage = 0;
if (bisDatum > vonDatum) {
var totTage = bisDatum - vonDatum;
var nDays = Math.round(totTage / (1000 * 60 * 60 * 24));

var pruefMS = vonDatum.getTime();
var startMS = vonDatum.getTime();
var endeMS = bisDatum.getTime();
var febCount = 0;
var langCount = 0;
var tage = 0;
for (var i = 0; i < nDays; i++) {
pruefMS = pruefMS + tagMs;
var pruefDatum = new Date(pruefMS);
var pruefMonat = pruefDatum.getMonth();
var pruefJahr = pruefDatum.getFullYear();

var pruefTag = pruefDatum.getDate();

if (pruefTag == 1 && pruefDatum != startMS) {
if (pruefMonat == 2) {
var istSchaltjahr = new Date(pruefJahr, 1, 29).getMonth() == 1;
if (istSchaltjahr) {
tage++;
}
else {
tage = tage + 2;
}
}
}
if (pruefTag != 31) {
tage++;
}
}
resultatZinsTage.innerText = tage.toString();
resultatTage.innerText = pruefTag;//nDays.toString();
}
else {
resultatTage.innerText = "Bis Datum muss grösser sein als von Datum";
}

}

</script>

<title>Zinstage berechen</title>
</head>

<body>
<table style="width:100%;">
<tr>
<td style="width:100px;"><input id="txtVonDatum" type="text" /></td>
<td style="width:100px;"><input id="txtBisDatum" type="text" /></td>
<td style="width:100px;"><button id="btnCalcDays" type="button" onclick="berecheZinstage();">Berechnen</button></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Tage:</td>
<td><label id="lblTage"></label></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>Zinstage:</td>
<td><label id="lblZinstage"></label></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
</body>
</html>

谢谢,马洛

最佳答案

我不明白这段代码试图实现什么,但问题是 DST(夏令时)。

每天添加 86400000 毫秒应该没问题。但在使用夏令时(德国默认)的区域设置中,日期 "2013/10/01 00:00:00"+ 31*86400000 的结果将是 "2013/10/31 23:00:00"

实际上,如果我们包括时区,它将是 "2013/10/01 00:00:00 GMT+0200"+ 31*86400000 将是 "2013/10/31 23:00:00 GMT+0100",因此添加在 UTC 术语中是正确的。

同样在 3 月,结果日期将是 "2013/04/01 01:00:00",但我们没有看到错误,因为我们只计算天数。

执行此类操作时,请始终使用 UTC 以避免头痛:)

关于十月的 Javascript 天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20692456/

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