js的時間和字符串的轉化的講解是有很多文章的,基本的都是一致的原理。不過曾經碰到過一個比較坑爹的需求,看到網上很少有相關的總結,所以自己簡單的記錄一下,給后來的同學們點思路。
當時的需求是這樣子的,某種活動有開始和結束時間兩個select,還有每場時間間隔,目的是根據起始時間和每場間隔來生成n個場次,例如八點到九點,每場時長40分鍾,生成的場次也就是8:00-8:40.說來也很簡單,但是問題在於拿到的是字符串,並不是時間,並且存在次日4:00這種奇葩的情況。當時費了好大勁,終於實現了,不過后來放到后端來做了。。不過從中也鞏固了一下基本的東西,也是一種積累。
此處主要討論如何由字符串按照時間的格式來生成場次的,其他的就忽略了。
首先要得到其實時間之間間隔了多久肯定要轉化為時間對象的,以某一天作為標准,因為處理的主要是時間間隔,任選一天也影響不大。為了處理第二天的情況,就匹配了一下‘次日’存在與否,來生成date對象。具體代碼如下:
//處理次日的情況 soluTomrrow: function (str) { var self = app; if (str.indexOf('日') > -1) { str = str.substr(str.indexOf('日') + 1); str = '2016/03/19' + ' ' + str; } else { str = '2016/03/18' + ' ' + str; } return str; },
把起始時間轉換為時間對象,具體到每場的時間間隔就要根據時間對象的特性來算了,因為時間對象都是相對某個特定年份的水岸差得到的,所以兩個時間之間的時間差也是可以得到的,然后根據分鍾差得到對應的時間對象,
//將時間轉化為字符串 getTimeStr: function (time) { var self = app, dateT = new Date(time), str; var hours = dateT.getHours() < 10 ? '0' + dateT.getHours() : dateT.getHours(); var mins = dateT.getMinutes() < 10 ? '0' + dateT.getMinutes() : dateT.getMinutes(); str = hours + ':' + mins; return str; }