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;
}