作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
此 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)?' '+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/
我是一名优秀的程序员,十分优秀!