gpt4 book ai didi

Javascript - 在一个循环中,在正确 6 个月后添加 1 周到日期对象行为不端

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:45:12 26 4
gpt4 key购买 nike

此 Javascript 为一年中的每个星期日生成发言人列表。它从 2015 年 5 月 3 日开始,一直到 2015 年 11 月 1 日都是正确的。当一周添加到 1-Nov-2015 时,它生成 7-Nov-2015而不是 2015 年 11 月 8 日(在 Firefox、IE 和 Opera 中)。我做错了什么?输出如下所示:...2015 年 10 月 25 日三 Angular 洲(OK) 2015 年 11 月 1 日 Alpha(正常) 2015 年 11 月 7 日 Bravo(错误——查看输出)

<!DOCTYPE HTML>
<html>
<head>
<title>Speaker List Generator</title>
<meta charset="utf-8">

<script>
'use strict';
// Handy faux constants
var MINUTE = 60 * 1000;
var HOUR = MINUTE * 60;
var DAY = HOUR * 24;
var WEEK = DAY * 7;

var month_str = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');

var speakers = new Array();
speakers[0] = new Array();
speakers = [['Alpha','#FFFAAE'],['Bravo','#FFE3CD'],['Charlie','#AEFFB3'],['Delta','#D2FFFF'],['Echo','#EDEDED']];

// Initialize first date to May 3rd, 2015
var date_obj = new Date('May 3, 2015');
var d = date_obj.getDate();
var m = month_str[date_obj.getMonth()];
var y = date_obj.getFullYear();
var day = '';
</script>
</head>

<body style='font-family:courier'>

<h3>Speaker List</h3>
<table>
<tr>
<th>Date</th><th>Speaker</th>
</tr>
<script>
// For each month
for (var j = 0; j < 8; j++) {
// For each speaker
for (var i = 0; i < speakers.length; i++) {
// Echo only speaks on a 5th Sunday.
// If Echo comes up, check for 1st Sunday.
if ((speakers[i][0] == 'Echo') && (d < 8)) {
continue;
}
// Add a space to 1 digit days
day = (d < 10)?'&nbsp;'+d:d;
document.writeln();
document.writeln(" <tr>");
document.writeln(" <td>"+day+"-"+m+"-"+y+"</td><td>"+speakers[i][0]+"</td>");
document.writeln(" </tr>");

// Add a week to the date for the next round.
date_obj.setTime(date_obj.getTime() + WEEK);

// Get next d, m, and y
d = date_obj.getDate();
m = month_str[date_obj.getMonth()];
y = date_obj.getFullYear();
}
}
</script>
</table>

</body>
</html>

最佳答案

当超过夏令时边界时,您添加一周的方式将失败,因为您添加的恰好是 24 小时,但有些日子有 23 小时,有些有 25 小时。

您可以通过设置 来避免这种情况。变化

date_obj.setTime(date_obj.getTime() + WEEK);

date_obj.setDate(date_obj.getDate() + 7);

不用担心换行到下个月,Date 对象会为您做这件事。

关于Javascript - 在一个循环中,在正确 6 个月后添加 1 周到日期对象行为不端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29850799/

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