【问题标题】:Sort by time (format: hh:mm a) in JavaScript for use with DataTables在 JavaScript 中按时间排序(格式:hh:mm a)以用于 DataTables
【发布时间】:2012-05-12 01:24:25
【问题描述】:

我正在尝试在 JavaScript 中按时间对数据进行排序。

How do I sort by time (format: 5:40 PM) in javascript for use with DataTables? 的答案适用于数据集,但如果您包含更多时间,例如。晚上 9 点 30 分,上午 8 点 15 分,这些时间排序出现故障并处理不当。

我正在处理相同的排序,但一次不少于 50 条记录。

【问题讨论】:

标签: javascript datatables


【解决方案1】:

您可以使用以下排序功能:

jQuery.fn.dataTableExt.oSort['string-case-asc']  = function(x,y) {

  x = getTimeValue(x);
  y = getTimeValue(y);

  return x<y?-1:x>y?1:0;

};

jQuery.fn.dataTableExt.oSort['string-case-desc'] = function(x,y) {

  x = getTimeValue(x);
  y = getTimeValue(y);

    return x<y?1:x>y?-1:0;
};

还有 getTimeValue() 方法:

function getTimeValue(x) {
  var time = x.match(/(\d+)(?::(\d\d))?\s*(P?)/);
  var h = parseInt(time[1],10) + (time[3] ? 12 : 0);
  if(!time[3] && parseInt(time[1],10)==12) h = 0;
  if(time[3] && parseInt(time[1],10)==12) h = 12;
  return h * 60 + ( parseInt(time[2],10) || 0 );
}

Working example here

【讨论】:

  • 虽然不是几乎那么清楚,但请注意,您可以用更少的输入来编写返回值,就像这样:return x&lt;1?-1:x&gt;1?1:0; 恕我直言,这只是可以接受的,因为您总是在自定义比较器的末尾看到它。
  • @Phrogz 你确定吗? doesnt work here。在您的声明中没有与y 的比较?
  • 呸!错别字;我的意思是return x&lt;y?-1:x&gt;y?1:0;只是优先级是“正确的”,因此不需要括号。 (显然,在我的脑海中以相同的声音开头的“一个”和“为什么”足以欺骗失败的同音转录设备,我称之为“手指”。)
  • @Phrogz 仍然不行...排序是一种方法...live.datatables.net/erefom/18/edit
  • 我的 DataTable 中仍有一些事情正在发生,这会导致排序失败。似乎 08:00 和 9:00 点的时间在上午的时间分配为 0,在下午的时间分配为 12,并且由于某种原因与这些时间混合在一起。我正在使用示例中的 javascript。这可能与解析有关吗?
猜你喜欢
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 2019-03-03
  • 2017-04-25
  • 2017-12-22
  • 2023-03-10
相关资源
最近更新 更多