Gnu*_*bie 3 javascript date object increment
此Javascript为每个星期日生成一年的演讲者列表.它始于2015年5月3日,并且在2015年11月1日之前是正确的.当一周添加到2015年11月1日时,它将生成2015年11月7日而不是2015年11月8日(在Firefox,IE和Opera中).我做错了什么?输出如下:... 2015年10月25日Delta(OK)2015年11月1日Alpha(OK)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>
Run Code Online (Sandbox Code Playgroud)
当您跨越夏令时时间边界时,您添加一周的方式将失败,因为您正在添加24小时,但有些天有23小时,有些有25天.
您可以通过设置日来避免这种情况.更改
date_obj.setTime(date_obj.getTime() + WEEK);
Run Code Online (Sandbox Code Playgroud)
至
date_obj.setDate(date_obj.getDate() + 7);
Run Code Online (Sandbox Code Playgroud)
不要担心包裹到下个月,该Date对象将为您做到这一点.
| 归档时间: |
|
| 查看次数: |
288 次 |
| 最近记录: |