生日祝福的代码,时间搞不懂~~谢谢帮忙~

如题所述

1. 问题描述:A的生日是今天,B的生日是明天,结果昨天中午12点起到今天上午12点前就显示是A的生日,过了中午12点就显示为B的生日了。时间上挪了12小时,也就是它是以中午12点为转换点,而不是晚上12点为转换点。
2. 代码分析:给出的JavaScript代码段用于在网页上显示即将到来的生日信息。它包含了一个生日列表,用于比较当前日期与列表中每个人的生日,然后输出距离最近的生日的天数。
3. 纠正错误:代码中的主要问题是计算生日前一天的时候,如果当前日期已经过了生日,代码会将年份加1,但是这样会错误地将下一个生日的年份也加1。此外,代码没有正确处理跨年的情况,应该使用`Date.UTC()`方法来计算日期差异。
4. 改写代码:为了修复上述问题,我们需要对`daysFromToday`和`writeNextBirthday`函数进行调整。我们将使用`Date.UTC()`来计算日期,并确保在比较时不会将年份错误地加1。
```javascript
function daysFromToday(sdate) {
var todayUtc = new Date(Date.UTC(today.getFullYear(), today.getMonth(), today.getDate()));
var sdateUtc = new Date(Date.UTC(sdate.getFullYear(), sdate.getMonth(), sdate.getDate()));
return Math.round((sdateUtc - todayUtc) / (24 * 60 * 60 * 1000));
}
function writeNextBirthday(list) {
var daysToClosest = 888;
var closest;
var todayUtc = new Date(Date.UTC(today.getFullYear(), today.getMonth(), today.getDate()));
for (var i in list) {
thisDate = new Date(Date.UTC(list[i].year, list[i].month - 1, list[i].date));
if (daysFromToday(thisDate) < 0) {
thisDate.setUTCFullYear(thisDate.getUTCFullYear() + 1);
}
if (daysFromToday(thisDate) < daysToClosest) {
daysToClosest = daysFromToday(thisDate);
closest = i;
}
}
if (daysToClosest === 0) {
document.write("今天[" + list[closest].person + "]" + "[" + (today.getFullYear() - list[closest].year) + "]岁大寿!祝你生日快乐^0^");
} else if (daysToClosest === 1) {
document.write("明天是[" + list[closest].person + "]的生日!大家不要忘了~");
} else {
document.write("" + list[closest].person + "将在[" + daysToClosest + "]天后过生日");
}
}
```
5. 注意:在实际应用中,确保服务器和客户端的时间同步,以及考虑时区差异。如果服务器和客户端时区不一致,可能需要进一步调整代码以适应特定环境。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜