Javascript 按时间的角度顺序
我有一个带有时间键和值的json对象,例如:Javascript 按时间的角度顺序,javascript,angularjs,Javascript,Angularjs,我有一个带有时间键和值的json对象,例如: [ { "name" : "Meeting 1", "time" : "9:30am", "day" : "Sunday", "location" : "Summit", }, { "name" : "Meeting 2", "time" : "10:00am", "day" : "Sunday",
[
{
"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)/, ''));
}