2010-09-30 61 views
0

我想從屏幕提取日期,添加1天並放回屏幕。提取日期,添加日期並放回

<input type='text'value='201' id='from_date'> 

<script>  

    function date_move(direction){    
     var from_date = document.getElementById('from_date').value;     
     var YYYY = from_date.substring(0,4); 
     var MM = from_date.substring(4,6); 
     var DD = from_date.substring(6,8);  
     var jsCurDate = new Date(parseInt(YYYY,10), parseInt(MM,10)-1, parseInt(DD,10)); 
     var newDate = addOrSubtracDays(jsCurDate,direction)    
     document.getElementById('from_date').value = newDate; 
    } 


    function addOrSubtracDays(jsCurDate,daysOffset){   
     var daylength= 1*24*60*60*1000; 
     var newDate = new Date(jsCurDate + daylength); 
     alert(newDate)  
    } 


date_move(+1); 

</script> 

回答

1

不能使用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,MMDD轉換爲基數爲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); 
+0

美麗。謝謝! – robert 2010-09-30 18:31:00

0

從我的理解你缺少在代碼的唯一事情是:

function addOrSubtracDays(jsCurDate,daysOffset){   
    var daylength= 1*24*60*60*1000; 
    var newDate = new Date(jsCurDate+(daylength*daysOffset)); 
    document.getElementById('from_date').value = newDate; //<-THIS LINE 
} 

編輯:對不起,我讀不好......沒關係

+0

你是正確的,這是失蹤,但也有其他問題。 – robert 2010-09-30 16:06:39