我正在尝试找到一种方法将帖子分成两个阵列:即将到来的和当前的(即将发布的帖子将在未来发布,目前已经发布)。
所有帖子都有一个scheduledPubDate,它是YYYY-MM-DDT00:00:00
格式的日期字符串。今天的日期必须是一个Date对象,因为它需要保持相关性(我正在使用时刻())
是否可以比较这两种不同的东西而不必使用.split并分别比较月/日/年
angular.forEach(data.items, function (key, index) {
if (moment(key.scheduledPubDate) > moment()) {
$scope.upcomingPosts.push(item[index]);
} else if (moment(key.scheduledPubDate) <= moment()) {
$scope.currentPosts.push(item[index]);
};
});
答案 0 :(得分:1)
JavaScript的内置Date object将为您提供帮助。
var date = Date.parse('2014-01-21T12:45:13');
date < Date.now() // true
出于示例的目的,我们假设items
是一系列帖子:
var items = [{
scheduledPubDate: '2014-01-21T12:45:13'
// ...other keys here
}, {
scheduledPubDate: '2017-03-01T15:21:00'
} // ...and so on
];
然后对reduce
的{{1}}操作可以对帖子进行分类:
items
现在var posts = items.reduce(function (memo, item) {
memo[Date.parse(item.scheduledPubDate) <= Date.now() ? 'current' : 'upcoming'].push(item);
return memo;
}, { current: [], upcoming: [] });
将包含来自posts.current
items
在当前日期之前的所有帖子的数组,scheduledPubDate
将包含所有预定帖子的数组。< / p>
编辑使用posts.upcoming
,以避免RobG指出的不可靠行为。这要求所有日期都采用您指定的Date.parse
格式;如果不是这种情况,则需要另一种解决方案。
答案 1 :(得分:1)
据推测,您希望将字符串视为UTC,这是一个简单的解析器:
// Expected format YYYY-MM-DDT00:00:00
function parseUTC(s) {
var b = s.split(/\D/);
return new Date(Date.UTC(b[0], b[1]-1, b[2], b[3], b[4], b[5]));
}
请注意,这不允许无效日期。如果需要,如果需要代码,则需要额外的行。所以现在你可以这样做:
if (parseUTC(key.scheduledPubDate) > new Date()) // or Date.now()
你真的不需要moment.js。
答案 2 :(得分:0)
首先按任意顺序创建一个元素数组,然后使用.sort()方法。
http://www.w3schools.com/jsref/jsref_sort.asp
var points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a-b});
用你自己的代替上述逻辑。上面的a和b可以是对象。
答案 3 :(得分:0)
您必须指定字符串的日期格式
var format = "YYYY-MM-DDT00:00:00";
angular.forEach(data.items, function (key, index) {
if (moment(key.scheduledPubDate, format) > moment()) {
$scope.upcomingPosts.push(item[index]);
} else if (moment(key.scheduledPubDate, format) <= moment()) {
$scope.currentPosts.push(item[index]);
};
});
工作示例(请参阅console.log):http://jsbin.com/fejaxiguce/1/edit?html,output