1. 程式人生 > >JS中將日期字串轉換為日期型過程中出現的問題

JS中將日期字串轉換為日期型過程中出現的問題

專案中需要在頁面上選擇一個日期(格式為:2015-08-20),然後通過JS實現,根據前面選中的日期,獲得該日期的前一天,相關JS程式碼如下:

/**
 * 引數:today 日期型
 * 返回:字串YYYYMMDD
 * 返回today的上一天日期
 * */
function getYestoday(today){         
    var   yesterday_milliseconds=today.getTime()-1000*60*60*24;     
    var   yesterday=new   Date();     
    yesterday.setTime(yesterday_milliseconds);     
      
    var strYear=yesterday.getFullYear();  
    var strDay=yesterday.getDate();  
    var strMonth=yesterday.getMonth()+1;  
    if(strMonth<10)  
    {  
        strMonth="0"+strMonth;  
    }  
    var strYesterday=strYear+""+strMonth+""+strDay;  
    return strYesterday;  
  } 


<script language="JavaScript">
	function StringTrim(str) {
    	return str.replace(/(^\s*)|(\s*$)/g, "");
	} 
	
	function Onclick(){
		var st = window.document.all.Tjtime.value;
		var styear=st.substring(0,4);
		var stmonth=st.substring(5,7);
		var intmonth=parseInt(stmonth)-1;
		var stday=st.substring(8,10);
		
		//new Date(yyyy,mth,dd);    mth:用整數表示月份,從0(1月)到11(12月)
		var   today=new   Date(styear,intmonth,stday);    

		//注:此處alert彈出的日期字串有問題*****************
		alert(today.getYear()+"-"+(today.getMonth()+1)+"-"+today.getDate());
		
		
		
		var lasttime=getYestoday(today);
		 
		
		if(st == ""){
			alert("請選擇查詢日期!");
			return false;

		}	 
		st = st.substring(0,4)+st.substring(5,7)+st.substring(8,10);
		window.document.all.myform.action= "./../showReport.jsp";

		commitAct(myform);
		window.document.all.myform.submit();
	}     
</script>


出現的問題:注意標************這一行。

當st,也就是頁面上選擇的日期,為2015年7月份的日期,任意一天,例如2015-07-31,通過上述函式將其轉換為日期,然後再轉換為字串彈出時,均正常,但當頁面選擇日期為2015-08-01 時,轉換成日期,再轉換為字串彈出時,竟然顯示:《2014-12-1》,頁面改成2015-08-01 ,竟然顯示《2014-12-20》,莫名奇妙。

經網上查詢資料,修改成以下方式:

JS也支援以下格式的字串轉換為日期型:

var datestring = '2013/2/28';   注:/./js只支援帶/斜槓的日期,不支援 2013-02-28
var d = new Date(datestring);   
d為所需的Date物件
若字串格式為 2013-02-28,則可以使用以下方式進行轉換:
var d= new Date(Date.parse(st.replace(/-/g,   "/"))); //轉換成Data();     將日期字串格式 "2013-02-28",st變數轉換為“203/02/28”,
其中/g代表全部替換