Javascript 根据日期将项目添加到两个数组(未来日期和过去日期)

Javascript 根据日期将项目添加到两个数组(未来日期和过去日期),javascript,angularjs,momentjs,Javascript,Angularjs,Momentjs,我试图找到一种方法,将帖子分为两个数组:即将发布的和当前的(即将发布的帖子是将来发布的,当前已经发布) 所有帖子都有一个ScheduledSubdate,它是一个日期字符串,格式为YYYY-MM-DDT00:00:00。而todays date必须是一个date对象,因为它需要保持相关性(我使用的是矩() 是否可以比较这两种不同的东西而不必使用.split并分别比较月/日/年 angular.forEach(data.items, function (key, index) { if (

我试图找到一种方法,将帖子分为两个数组:即将发布的和当前的(即将发布的帖子是将来发布的,当前已经发布)

所有帖子都有一个ScheduledSubdate,它是一个日期字符串,格式为
YYYY-MM-DDT00:00:00
。而todays date必须是一个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]);
   };
 });
angular.forEach(数据项、函数(键、索引){
if(时刻(key.scheduledsubdate)>时刻(){
$scope.upcomingPosts.push(项[索引]);

}else if(矩(key.scheduledsubdate)首先以任意顺序创建元素数组,然后使用.sort()方法


只需用您自己的逻辑替换上面的逻辑。上面的a和b可以是对象。

您必须指定字符串的日期格式

 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]);
   };
 });
var format=“YYYY-MM-DDT00:00:00”;
angular.forEach(数据项、函数(键、索引){
if(矩(key.scheduledsubdate,格式)>矩()){
$scope.upcomingPosts.push(项[索引]);
}else if(moment(key.scheduledsubdate,format)JavaScript的内置功能将在这里帮助您

var date = Date.parse('2014-01-21T12:45:13');
date < Date.now() // true
然后对
项目进行
reduce
操作可以对帖子进行分类:

var posts = items.reduce(function (memo, item) {
    memo[Date.parse(item.scheduledPubDate) <= Date.now() ? 'current' : 'upcoming'].push(item);
    return memo;
}, { current: [], upcoming: [] });
var posts=items.reduce(功能(备忘录,项目){

memo[Date.parse(item.scheduledsubdate)您可能希望字符串被视为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()

这不是一个完整的答案。

虽然这不是一个完整的答案,但是你应该考虑使用<代码> NG Realth[/COD],用一个过滤器和一个指令来做这件事,而不是一个前程-看看我没有想到做这件事。但是这对我来说不会起作用,因为我没有显示数据,而是把它们分成两个AR。但是我很感激你的提醒!我总是忘记过滤器,我很确定你也可以在非UI的东西上执行ng repeat。它只返回一个数组的副本,按你包含的模型参数排序。你可以使用:
moment(theDateStr,theFormatStr)将日期解析为字符串
。一旦你有了它,你就可以用
来比较日期。没有内置的东西来比较字符串日期,你需要对它们进行解析。字符串没有时区,你想把它当作UTC还是本地?标准不同,所以你不能依赖于它。这是个好主意,但我不想把它们放在一个标准中我更关心的是1)如何比较不同格式的日期2)是否可以将字符串转换为日期3)是否可以比较这两个不同的事物而不必使用.split并分别比较月/日/年请不要参考W3Schools。使用用于规范性参考或类似示例。没有“日期类”在javascript中。有。不要使用日期构造函数来解析字符串,这是不可靠的。您建议的格式将被某些脚本引擎视为本地格式(符合ES5),而UTC则被其他脚本引擎视为本地格式(符合ECMA-262 ed 6草稿)和NaN或其他完全不同的内容。感谢您指出这一点。我更新了答案,改为使用
Date.parse
,因为问题说明所有日期字符串的格式都是
YYYY-MM-DDT00:00
// 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()