JS中將日期字串轉換為日期型過程中出現的問題
阿新 • • 發佈:2019-02-15
專案中需要在頁面上選擇一個日期(格式為: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代表全部替換