不能使用element.value
以獲取任意HTML元素的內容,.value
僅適用於表單元素。使用element.innerHTML
代替:
var from_date = document.getElementById('from_date').innerHTML;
而且,你的substring
使用是錯誤的。我覺得substr
更加清晰:
var YYYY = from_date.substr(0,4);
var MM = from_date.substr(4,2);
var DD = from_date.substr(6,2);
在addOrSubtracDays
(不應該說是addOrSubtractDays
?)你想的毫秒數,所以你應該叫Date.getTime
。此外,你真的想return
新值:
return new Date(jsCurDate.getTime() + daylength * daysOffset);
當改變#from_date
你可能希望你的日期是在相同的格式。對於這一點,我向Date
的原型的新方法(和String
與助手功能):
String.prototype.padLeft = function (length, character) {
return new Array(length - this.length + 1).join(character || ' ') + this;
};
Date.prototype.toFormattedString = function() {
return [String(this.getFullYear()),
String(this.getMonth()+1).padLeft(2, '0'),
String(this.getDate()).padLeft(2, '0')].join('');
};
在此之後,我們可以簡單地調用toFormattedString
:
document.getElementById('from_date').innerHTML = newDate.toFormattedString();
順便說一句,你不' t需要明確地將YYYY
,MM
和DD
轉換爲基數爲10的整數;這些都將自動轉換(而不承擔與0
開頭的字符串是一個八進制數):
var jsCurDate = new Date(YYYY, MM - 1, DD);
爲了清楚起見,完整的腳本現在讀取:
String.prototype.padLeft = function (length, character) {
return new Array(length - this.length + 1).join(character || ' ') + this;
};
Date.prototype.toFormattedString = function() {
return [String(this.getFullYear()),
String(this.getMonth()+1).padLeft(2, '0'),
String(this.getDate()).padLeft(2, '0')].join('');
};
function date_move(direction){
var from_date = document.getElementById('from_date').innerHTML;
var YYYY = from_date.substr(0,4);
var MM = from_date.substr(4,2);
var DD = from_date.substr(6,2);
var jsCurDate = new Date(YYYY, MM - 1, DD);
var newDate = addOrSubtracDays(jsCurDate, direction);
document.getElementById('from_date').innerHTML = newDate.toFormattedString();
}
function addOrSubtracDays(jsCurDate, daysOffset){
var daylength= 1*24*60*60*1000;
return new Date(jsCurDate.getTime() + daylength * daysOffset);
}
date_move(+1);
美麗。謝謝! – robert 2010-09-30 18:31:00