如何在各种不同的JavaScript环境中对ISO时间集合进行排序?

如何在各种不同的JavaScript环境中对ISO时间集合进行排序?,javascript,Javascript,它在X5 JSCore和节点环境中工作良好,但在iOSWKWebView环境中不工作。为什么 这是我的密码: var test = [ {name: "aaa",createTime: "2019-10-10T11:11:16.000+0000"}, {name: "ccc",createTime: "2019-10-03T10:11:16.000+0000"}, {name: "bbb",createTime: "2019-10-07T10:11:16.000+0000

它在X5 JSCore节点环境中工作良好,但在iOSWKWebView环境中不工作。为什么

这是我的密码:

var test = [
    {name: "aaa",createTime: "2019-10-10T11:11:16.000+0000"},
    {name: "ccc",createTime: "2019-10-03T10:11:16.000+0000"},
    {name: "bbb",createTime: "2019-10-07T10:11:16.000+0000"},
    {name: "zzz",createTime: "2019-10-09T03:12:25.000+0000"},
]

const sortList = test.sort((a, b) => {
    return new Date(b.createTime) - new Date(a.createTime)
  })

  console.log(sortList);
我用这篇文章作为参考,但它在其他上下文中不起作用

如果ISO字符串是非法的,那么它在任何环境中都不起作用,但现在它在其他环境中起作用

只有iOS环境不起作用

为什么?


你能帮我吗

我认为应该做减法运算,比如Unix时间戳,而不是两个
Date
对象。它将更加防弹,更少地依赖于它将运行的javascript环境

例如:


最好的

您拥有的日期时间字符串不是空的,因为它们在时区表达式中缺少冒号。您应该首先尝试在后端更改它。如果你不能,你必须自己添加缺失的冒号

let dateString='2019-10-10T11:11:16.000+0000';
常数colonPosition=26;
如果(dateString.length==28){
dateString=dateString.substring(0,冒号位置)+':'+dateString.substring(冒号位置);
}

log(日期字符串)iso只是一个字符串。如果要对其进行排序,则需要使用带有lambda函数的sort函数来告诉如何确定排序。下面的纪尧姆做了一般需要的事情。根据您需要执行的操作,您可能需要根据
getTime()
或该属性的其他子属性进行排序。通常情况下,这些子属性不是日期可以解析的格式。具体来说,ccc、bbb和zzz的时间在日期中只有一个数字,而ISO格式使用两个数字(0填充)。除了不能直接减去日期之外,还需要转换为时间戳,例如使用
getTime()
Define“not work”。现在您已经添加了零,只需使用字符串排序:@HereticMonkey我引用了它,但它在其他环境中不起作用非常感谢,但在iOS WKWebView环境中,这并不可怕@BaiClassmateXiao我忘了一些括号,我更新了我上面的答案,它仍然失败吗?非常感谢您的重新编辑,但它在iOSWKWebView环境中仍然不起作用非常感谢您的回答,分析非常完美,请学习,谢谢
const sortList = test.sort((a, b) => {
    return (new Date(b.createTime)).getTime() - (new Date(a.createTime)).getTime()
  })