无法对格式为dd/MM/yyyy HH:MM的javascript中的日期时间进行排序

无法对格式为dd/MM/yyyy HH:MM的javascript中的日期时间进行排序,javascript,sorting,datetime,Javascript,Sorting,Datetime,我无法用javascript按最新日期时间排序 以下是我的json: let jsonStr = [{id:1,date:"04/04/2017 17:47"}, {id:2,date:"05/01/2015 12:35"}, {id:3,date:"31/02/2017 10:00"}, {id:4,date:"31/02/2017 12:00"}]; 预期结果:最新日期时间应位于列表的第一位 201

我无法用javascript按最新日期时间排序

以下是我的json:

let jsonStr = [{id:1,date:"04/04/2017 17:47"},
               {id:2,date:"05/01/2015 12:35"},
               {id:3,date:"31/02/2017 10:00"},
               {id:4,date:"31/02/2017 12:00"}];
预期结果:最新日期时间应位于列表的第一位

  • 2017年4月4日17:47
  • 2017年2月31日12:00
  • 2017年2月31日10:00
  • 2015年1月5日12:35
当前结果:

  • 2017年2月31日12:00
  • 2017年2月31日10:00
  • 2017年4月4日17:47
  • 2015年1月5日12:35
我使用的排序逻辑:

function sortFunction(a,b){  
   var dateA = new Date(a.date).getTime();
   var dateB = new Date(b.date).getTime();
   return dateB > dateA ? 1 : -1; 
}; 

let jsonStr = [{id:1,date:"04/04/2017 17:47"},
               {id:2,date:"05/01/2015 12:35"},
               {id:3,date:"31/02/2017 10:00"},
               {id:4,date:"31/02/2017 12:00"}];

jsonStr.sort(sortFunction);​
我使用的参考链接:

function sortFunction(a,b){  
   var dateA = new Date(a.date).getTime();
   var dateB = new Date(b.date).getTime();
   return dateB > dateA ? 1 : -1; 
}; 

let jsonStr = [{id:1,date:"04/04/2017 17:47"},
               {id:2,date:"05/01/2015 12:35"},
               {id:3,date:"31/02/2017 10:00"},
               {id:4,date:"31/02/2017 12:00"}];

jsonStr.sort(sortFunction);​

提前谢谢。

这不是按照你认为的方式来解释日期。比如说,

console.log(new Date("05/01/2015 12:35"));
为我制作:

Date 2017-05-01T19:35:00.000Z
这表明它希望日期为MM/dd/yyyy格式。
您可以推出自己的解决方案,也可以使用其中一个库。有很多解决方案可供选择。我个人喜欢这样

另一个引用自的示例将日期解析格式控件添加到字符串:

例如:

"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
"2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");

它不是按照你认为的方式来解释日期。比如说,

console.log(new Date("05/01/2015 12:35"));
为我制作:

Date 2017-05-01T19:35:00.000Z
这表明它希望日期为MM/dd/yyyy格式。
您可以推出自己的解决方案,也可以使用其中一个库。有很多解决方案可供选择。我个人喜欢这样

另一个引用自的示例将日期解析格式控件添加到字符串:

例如:

"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
"2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");

这是因为将某些日期放入日期对象
新日期()

例如:2017年2月31日不是有效日期


如果您输入了正确的日期,它将为您提供正确的输出。

这是因为您的一些日期在放入日期对象
new date()时返回了无效日期

例如:2017年2月31日不是有效日期


如果输入正确的日期,它将为您提供正确的输出。

关于日期的第一条规则是不要使用日期构造函数(或Date.parse)来解析字符串。手动操作。库可以提供帮助,但如果您只需要处理一种格式,那么一个简单的函数就足够了

您可以将字符串转换为排序格式,例如ISO 8601,或将其转换为日期并对其进行排序,例如

var data=[{id:1,日期:“04/04/2017 17:47”},
{id:2,日期:“05/01/2015 12:35”},
{id:3,日期:“31/02/2017 10:00”},
{id:4,日期:“31/02/2017 12:00”};
函数parseDMYhm(s){
var b=s.split(/\D/);
返回新日期(b[2],b[1]-1,b[2],b[3],b[4]);
}
数据排序(函数(a,b){
返回parseDMYhm(a.date)-parseDMYhm(b.date);
});

控制台日志(数据)带有日期的第一条规则是不要使用日期构造函数(或Date.parse)来解析字符串。手动操作。库可以提供帮助,但如果您只需要处理一种格式,那么一个简单的函数就足够了

您可以将字符串转换为排序格式,例如ISO 8601,或将其转换为日期并对其进行排序,例如

var data=[{id:1,日期:“04/04/2017 17:47”},
{id:2,日期:“05/01/2015 12:35”},
{id:3,日期:“31/02/2017 10:00”},
{id:4,日期:“31/02/2017 12:00”};
函数parseDMYhm(s){
var b=s.split(/\D/);
返回新日期(b[2],b[1]-1,b[2],b[3],b[4]);
}
数据排序(函数(a,b){
返回parseDMYhm(a.date)-parseDMYhm(b.date);
});

控制台日志(数据)
您的id 3和id 4的日期不可能是错误的2017年2月31日实际上javascript
日期
预期格式为
MM/dd/yyyy
因此第3和第4个日期无效,如果您尝试使用
新日期(…)
方法,它将返回
无效日期
,尝试以
MM/dd/yyy hh:MM
的形式从您的服务器发送json日期,您所引用的链接将适用于您。请尝试fiddle@DeepakSharma你确定吗?您检查过格式了吗?您的id 3和4的日期不可能是2017年2月31日。实际上,javascript
date
expect格式为
MM/dd/yyyyy
3和4是无效日期,如果您尝试使用
新日期(…)
方法,它将返回
无效日期
,尝试以
MM/dd/yyy hh:MM
的形式从您的服务器发送json日期,您所引用的链接将适用于您。请尝试fiddle@DeepakSharma你确定吗?你检查过格式了吗?当然可以。即使不是有效日期,日历中也不存在2017年2月31日,javascript在处理@OuroborusNo时将返回无效日期,就您或我而言,这不是有效日期。但是,假设日期的格式符合Javascript的预期,它会尽最大努力:
新日期(“02/31/2000”)
对于我来说,最终成为
日期1900-03-03T08:00:00.000Z
。@RahulArora对于ECMA-262中指定格式以外的任何格式,浏览器都可以按自己喜欢的方式解析字符串,因此,2017年2月31日可能会返回无效日期或2017年3月3日或2019年7月1日的日期。确实如此。即使不是有效日期,日历中也不存在2017年2月31日,javascript在处理@OuroborusNo时将返回无效日期,就您或我而言,这不是有效日期。但是,假设日期的格式符合Javascript的预期,它会尽最大努力:
新日期(“02/31/2000”)
对于我来说,最终成为
日期1900-03-03T08:00:00.000Z
。@RahulArora对于ECMA-262中指定格式以外的任何格式,浏览器都可以按自己喜欢的方式解析字符串,因此,2017年2月31日可能会返回无效日期或2017年3月3日或2019年7月1日的日期。