0

我有格式为“10:30AM”、“3:00PM”等的字符串,我希望能够对它们使用基本操作,例如 > 或 < 以及根据当前时间到 10:30 为止的小时数。我想在插入数据库之前在客户端(javascript/jQuery)进行转换。

我应该将这些转换为 javascript 日期时间对象吗?或者将正则表达式更改为 24 小时时间格式的数字更适合执行这些操作?还是我让这变得比应该的更困难?

提前致谢。

4

4 回答 4

1

我个人认为,如果是基本操作,我会将其转换为 24 小时,然后进行比较。如果它更复杂,那么我会将其转换为日期时间对象。

于 2013-07-04T23:52:00.703 回答
1

您将要转换为日期时间——将数字作为字符串进行比较时有很多极端情况——咬紧牙关并从中确定日期要容易得多。有一百万个示例库可供使用或从中获取灵感。

于 2013-07-04T23:54:51.113 回答
0

我建议您为此使用图书馆。我更喜欢Moment.js,它允许您执行比较或知道距当前时间有多少小时。

于 2013-07-04T23:53:23.670 回答
0

有点晚了,但是当您确定有这样一个需要以特定方式转换的特定字符串时,您可以编写自己的实现来转换时间,排序或比较会更轻松、更快:

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);
于 2013-07-05T00:35:48.543 回答