我有格式为“10:30AM”、“3:00PM”等的字符串,我希望能够对它们使用基本操作,例如 > 或 < 以及根据当前时间到 10:30 为止的小时数。我想在插入数据库之前在客户端(javascript/jQuery)进行转换。
我应该将这些转换为 javascript 日期时间对象吗?或者将正则表达式更改为 24 小时时间格式的数字更适合执行这些操作?还是我让这变得比应该的更困难?
提前致谢。
我有格式为“10:30AM”、“3:00PM”等的字符串,我希望能够对它们使用基本操作,例如 > 或 < 以及根据当前时间到 10:30 为止的小时数。我想在插入数据库之前在客户端(javascript/jQuery)进行转换。
我应该将这些转换为 javascript 日期时间对象吗?或者将正则表达式更改为 24 小时时间格式的数字更适合执行这些操作?还是我让这变得比应该的更困难?
提前致谢。
我个人认为,如果是基本操作,我会将其转换为 24 小时,然后进行比较。如果它更复杂,那么我会将其转换为日期时间对象。
您将要转换为日期时间——将数字作为字符串进行比较时有很多极端情况——咬紧牙关并从中确定日期要容易得多。有一百万个示例库可供使用或从中获取灵感。
我建议您为此使用图书馆。我更喜欢Moment.js,它允许您执行比较或知道距当前时间有多少小时。
有点晚了,但是当您确定有这样一个需要以特定方式转换的特定字符串时,您可以编写自己的实现来转换时间,排序或比较会更轻松、更快:
var Time=function(time){
// TODO: you an check here what format the time variable
// is and if it's possible to convert it to time or milTime
this.time=time;
this.milTime=this.toMilTime();
this.val=this.setVal();
};
Time.prototype.toMilTime=function(){
return this.time.replace(/([0-9]{1,2}).([0-9]{1,2})([\w]{2})/,function(){
//TODO: put this in a try catch and check if hours and numbers
// are correct numbers. throw a new Error with the correct description
var hours=(arguments[1].length===1)?"0"+arguments[1]:
arguments[1],
minutes=(arguments[2].length===1)?"0"+arguments[2]:
arguments[2],
pam=arguments[3].toUpperCase();
if(pam==="PM"){
hours=parseInt(hours,10)+12;
}
return hours + ":" + minutes;
});
};
Time.prototype.setVal=function(){
return parseInt(this.milTime.replace(/:/,""),10);
}
// used for sorting
Time.prototype.valueOf=function(){
return this.val;
};
// needed for <> comparison
Time.prototype.toString=function(){
return this.milTime;
};
var t = new Time("10:30AM"),
t1=new Time("1:00PM"),
t2=new Time("10:30AM");
console.log(t.milTime,t1.milTime);
console.log(t>t1);// this will use toString()
console.log(t1>t);// this will use toString()
console.log(t===t2);//false
console.log(t==t2);//false
console.log(t.milTime===t2.milTime);//true
var arr=[t,t1,t2].sort(function(a,b){
return a.valueOf()-b.valueOf();// force it to use valueOf
});
console.log(arr);