用moment.js排序

Seb*_*önn 5 javascript sorting date momentjs

我解析了从带有Moment的API获得的日期,当我完成数据推送时,我需要对数组进行排序.我有,ajaxinfo.startdate但这不起作用.它给了我一个警告

"2018-01-28T13:00:00+00:00"

我解析我的数组moment,但我该如何排序呢?

我的对象包含数据,时间,ID等信息.

myobject.name = name;
myobject.time = Moment(ajaxinfo.startdate).format('DD/MM/YYYY');
array.push(myobject);
// ... more data is added ...
array.sort((left, right) => {
    return Moment.utc(left.time).diff(Moment.utc(right.time));
});
Run Code Online (Sandbox Code Playgroud)

它没有排序,我收到警告.ajaxinfo.startdate是我从API获得的字符串,看起来像Date()

编辑:更多内容

tri*_*cot 8

如其他人所述,格式"DD/MM/YYYY"不是ISO 8601格式,结果字符串可能不明确.

您应该使用Date或moment对象,而不是字符串.

因此,format在将数据对象存储日期时不要调用.如果你需要渲染日期,请format在那个时候打电话.

const Moment = moment;

// Sample strings
var ajaxinfos = [
    { name: "x", startdate: "2018-01-28T13:00:00+00:00" },
    { name: "y", startdate: "2018-01-26T18:00:00+00:00" }
];

const array = [];
for (const ajaxinfo of ajaxinfos) {
    const myobject = {};
    myobject.name = ajaxinfo.name;
    myobject.time = Moment(ajaxinfo.startdate);  // don't call format
    array.push(myobject);
}

// No more need to convert strings to dates while sorting:
array.sort((left, right) => left.time.diff(right.time));
console.log(array);

// Whenever you need to format:
const formatted = array.map(info => info.time.format("MM/DD/YYYY"));
console.log(formatted);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.15.0/moment.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


小智 3

根据警告中的 momentjs 文档链接,浏览器在解析您提供的格式时可能不可靠或不一致"DD/MM/YYYY"。如果您需要保留此格式,一种解决方案是在计算 时将字符串转换回 moment 对象时提供格式diff。所以你可以做 return moment.utc(left.timeStamp, 'DD/MM/YYYY').diff(moment.utc(right.timeStamp, 'DD/MM/YYYY'))