我从一组对象中获取日期值:"/Date(1560458281000)/"
。我只想按降序排列这些日期。我愿意接受任何使用纯JavaScript和/或moment.js的示例。顺便说一下,小时和分钟很重要。我将显示为2014/10/29 4:50
let dateSorted = this.props.myObj.sort(function(a,b) {
sorted= new Date(Number(a.Date.replace(/\D/g, ''))) - new
Date(Number(b.Date.replace(/\D/g, '')))
return sorted;
})
此代码无效。
答案 0 :(得分:0)
您应该谨慎使用sorted
变量,因为它缺少const / let
初始化程序,我会这样写:
let dateSorted = this.props.differences.sort(function(a,b) {
const timeA = Number(a.Date.replace(/\D/g, ''))
const timeB = Number(b.Date.replace(/\D/g, ''))
return timeA - timeB;
})
由于您的日期采用时间戳格式,因此您甚至无需将其转换为日期即可进行比较,因此可以直接减去数字。
一种更简单的方法是使用localeCompare
:
let dateSorted = this.props.differences.sort(function (a, b) {
return a.Date.localeCompare(b.Date)
})
因为您的日期将通过使用字母顺序正确地排序。
答案 1 :(得分:0)
此代码应按从高到低的顺序对代码进行排序,并对日期进行格式化:
data = [{Date:"/Date(1560457284000)/"},{Date: "/Date(1560458274000)/"},{Date:"/Date(1560458192000)/"}]
sorted = data.sort(({Date:a}, {Date:b}) => +b.replace(/\D/g, '') - +a.replace(/\D/g, ''))
sorted = sorted.map(({Date}) => ({Date: moment(+Date.replace(/\D/g, '')).format('YYYY/MM/DD H:mm')}))
console.log(sorted)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
答案 2 :(得分:0)
使用Array#map
将字符串数组转换为momentjs实例数组,然后使用Array#sort
作为返回值的a - b
对其进行排序(对于降序,则使用b - a
进行排序)订单)。
dates.map(d => moment(+d.replace(/\D/g, ''))).sort((a, b) => a - b);
示例:
let dates = [
'/Date(1560458281000)/',
'/Date(1560454528989)/',
'/Date(1560450204150)/',
'/Date(1560458450489)/'
];
// Replaces.
dates = dates.map(d => moment(+d.replace(/\D/g, '')));
// Sorts in ascending order (return b - a for desc).
dates.sort((a, b) => a - b);
// "dates" is containing your sorted date in momentjs instances now.
console.log(dates);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>