Javascript 按时间的角度顺序

Javascript 按时间的角度顺序,javascript,angularjs,Javascript,Angularjs,我有一个带有时间键和值的json对象,例如: [ { "name" : "Meeting 1", "time" : "9:30am", "day" : "Sunday", "location" : "Summit", }, { "name" : "Meeting 2", "time" : "10:00am", "day" : "Sunday",

我有一个带有时间键和值的json对象,例如:

[
    {
        "name" : "Meeting 1",
        "time" : "9:30am",
        "day" : "Sunday",
        "location" : "Summit",
    },
    {
        "name" : "Meeting 2",
        "time" : "10:00am",
        "day" : "Sunday",
        "location" : "Juab",
    }
]
我想做的是按时间属性对它们进行排序,但您可以看到这种困境。如果我使用Angular的orderBy方法,它会说上午10:00应该在上午9:00之前到达。我曾想过将对象拆分为am和pm,但最终还是遇到了同样的问题


我对Angular是个新手,所以我不知道解决这个问题的最佳方法。有什么想法吗?

最简单的方法是将您的12小时AM/PM转换为24小时整数

例如,发件人:

因此,下午1:00是1300,下午2:00是1400等等。。。这样,您就可以正确排序,而无需花费更复杂的日期函数

您可以转换回显示,或者为对象创建第三个属性,即time_24


这不是一个完整的解决方案,而是一个起点。有关更多详细信息,请参见

您可以编写一个足够智能的自定义过滤器,以按照您想要的方式进行排序,或者尝试利用现有库(如矩.js)中的功能。。。不管怎样,看起来你需要一个没有日期的定制过滤器,谁说9:00早于10:00?可能是第一天的10:00早于第二天的9:00。考虑经营24X7的公司。晚上11:00的会议可能早于凌晨2:00的会议。@MattJohnson你说得对。以上示例仅用于示例目的。这些对象实际上有天属性,我按一周中的几天对它们进行过滤。请显示您实际使用的实际值示例。否则,答案将完全不同。
function convertTo24Hour(time) {
    var hours = parseInt(time.substr(0, 2));
    if(time.indexOf('am') != -1 && hours == 12) {
        time = time.replace('12', '0');
    }
    if(time.indexOf('pm')  != -1 && hours < 12) {
        time = time.replace(hours, (hours + 12));
    }
    time = time.replace(':','').trim();
    return parseInt(time.replace(/(am|pm)/, ''));
}