如何解决setDateday + 1返回错误的天
| 为什么这样做:startDate.setDate(startDate + 1);
生成此奇怪的订单(在下个月初中断):
7,27,28,30,**1,4,3,** 6,7,10,9,12,
更新(更多代码):
renderWeekFromMonday : function(date) {
var dayContainer = $(\'#day\');
// clear div
dayContainer.empty();
// Render days
for (var i = 0; i <= 7; i++) {
// Get mondday day (1-31)
var day = date.getDate();
// Today
var t = new Date();
// Create dayobject for usage inside for loop
var d = new Date(date);
// Render 7 days (1 week)
for (var i = 0; i < 7; i++) {
// New day (+1)
d.setDate(day + i)
console.info(d.getDate());
// Create html
var span = $(\"<span>\").addClass(\"calElement\").attr(\"time\",d.getTime())
var w = 25;
span.html(\"<span class=dayNumber>\" + d.getDate() + \"</span><br>\" + this.dayNames[d.getDay()]).css(\"width\",w);
//span.html(\"<span class=dayNumber>\" + d.getDate() + \"</span>\");
// Append day
dayContainer.append(span);
}
}
},
解决方法
只是一个猜测,也许您正在寻找:
startDate.setDate(startDate.getDate() + 1);
如果startDate
是Date
对象,则startDate + 1
没有多大意义。
看到更新的代码之后:您的问题很可能是因为您有两个嵌套循环,两个循环都以i
递增。对其中一个循环使用其他变量。
,您的代码看起来不错-我使用的是FF4,日期计算看起来正确。我已经在此处发布了一个示例的代码:http://jsfiddle.net/EbNcr/2/
是否有用于测试的特定浏览器或日期来获得奇怪的结果?
(我希望我可以以此作为评论,但是我不认为我对此享有声誉...)
,感谢您的帮助。我只是有一个简单的复制和粘贴错误(两个循环)。我将最终代码放入一个简单的jquery插件(由一些oder插件插入)
var MILLIS_IN_DAY = 86400000;
var MILLIS_IN_WEEK = MILLIS_IN_DAY * 7
jQuery.fn.calendarPicker = function(options) {
// -------------------------- start default option values --------------------------
options.date = new Date();
options.dayNames = [\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"];
options.firstDayOfWeek = 1;
options.showNavigation = true;
// -------------------------- end default option values --------------------------
var calendar = {
changeDate : function(date) {
// calculate new start date
this.currentFirstDayOfWeek = this._firstDayOfWeek(date);
// render days
for (var i = 0; i < 7; i++) {
// create dayobject
var day = new Date(this.currentFirstDayOfWeek.getTime() + MILLIS_IN_DAY * i);
// render container
var span = $(\"<span>\").addClass(\"calElement\").attr(\"time\",day.getTime())
// render day
span.html(\"<span class=dayNumber>\" + day.getDate() + \"</span><br>\" + options.dayNames[day.getDay()]);
if (day.getYear() == date.getYear() && date.getMonth() == day.getMonth() && day.getDate() == date.getDate())
span.addClass(\"today\");
if (day.getYear() == date.getYear() && day.getMonth() == date.getMonth() && day.getDate() == date.getDate())
span.addClass(\"selected\");
theDiv.append(span);
// render navigation
if (i == 0 && options.showNavigation) {
var prevBtn = $(\"<span>\").addClass(\"prev\").html(\"prev\");
var self = this;
prevBtn.bind(\'click\',function() { self.prevWeek(); });
theDiv.prepend(prevBtn);
} else if (i == 6 && options.showNavigation) {
var nextBtn = $(\"<span>\").addClass(\"next\").html(\"next\")
var self = this;
nextBtn.bind(\'click\',function() { self.nextWeek(); });
theDiv.append(nextBtn);
}
}
},/*
* Go to the previous week relative to the currently displayed week
*/
prevWeek : function() {
//minus more than 1 day to be sure we\'re in previous week - account for daylight savings or other anomolies
var newDate = new Date(this.currentFirstDayOfWeek.getTime() - (MILLIS_IN_WEEK / 6));
this._clearCalendar();
this.changeDate(newDate);
},/*
* Go to the next week relative to the currently displayed week
*/
nextWeek : function() {
//add 8 days to be sure of being in prev week - allows for daylight savings or other anomolies
var newDate = new Date(this.currentFirstDayOfWeek.getTime() + MILLIS_IN_WEEK + (MILLIS_IN_WEEK / 7));
this._clearCalendar();
this.changeDate(newDate);
},/*
* returns the date on the first millisecond of the week
*/
_firstDayOfWeek : function(date) {
var midnightCurrentDate = new Date(date.getFullYear(),date.getMonth(),date.getDate());
var adjustedDate = new Date(midnightCurrentDate);
adjustedDate.setDate(adjustedDate.getDate() - this._getAdjustedDayIndex(midnightCurrentDate));
return adjustedDate;
},_clearCalendar : function() {
theDiv.empty();
},/*
* gets the index of the current day adjusted based on options (e.g.firstDayofWeek)
*/
_getAdjustedDayIndex : function(date) {
var midnightCurrentDate = new Date(date.getFullYear(),date.getDate());
var currentDayOfStandardWeek = midnightCurrentDate.getDay();
var days = [0,1,2,3,4,5,6];
this._rotate(days,this.options.firstDayOfWeek);
return days[currentDayOfStandardWeek];
},/*
* rotate an array by specified number of places.
*/
_rotate : function(a,p ) {
for (var l = a.length,p = (Math.abs(p) >= l && (p %= l),p < 0 && (p += l),p),i,x; p; p = (Math.ceil(l / p) - 1) * p - l + (l = p)) {
for (i = l; i > p; x = a[--i],a[i] = a[i - p],a[i - p] = x);
}
return a;
},};
// Pass options
calendar.options = options;
// build the calendar on the first element in the set of matched elements.
var theDiv = this.eq(0);//$(this);
theDiv.addClass(\"calBox\");
// empty the div
theDiv.empty();
// entry point
calendar.changeDate(options.date);
return calendar;
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。