【问题标题】:How to return number of dates that are before today, today and tomorrow from array如何从数组中返回今天、今天和明天之前的日期数
【发布时间】:2019-04-03 15:38:22
【问题描述】:

我有一个充满日期的数组。我想从这个数组中获取 3 个单独的信息。

  1. 今天之前的日期数。更具体的日期是现在之前,所以我需要包括小时、分钟和秒。
  2. 从现在到当前日期结束的日期数
  3. 明天日期的日期数

数组中的示例日期:

"02/11/2019 11:22:28",
"05/14/2019 12:17:49",
"06/06/2019 09:00:00",
"05/02/2019 11:05:30"

我相信 moment.js 可以在这里提供帮助,但我无法使其发挥作用。

【问题讨论】:

  • 你试过什么?将该代码连同其中的错误/问题一起发布。
  • 是字符串数组吗?
  • 我试图使用与此处相同的代码:stackoverflow.com/questions/43312848/… 数组看起来像这样:1:“02/11/2019 11:22:28”2:“05/14/2019 12 :17:49" 3:"06/06/2019 09:00:00" 4:"05/02/2019 11:05:30"

标签: javascript arrays momentjs


【解决方案1】:

我认为您不需要导入 JS 框架来执行此操作。

您可以在纯 JavaScript 中比较 Dates

const arrayOfDates = ["02/11/2019 11:22:28", "02/11/2020 11:22:28",
"04/03/2019 11:33:54"];

const TODAY = new Date();
const END_OF_TODAY = new Date(TODAY.getFullYear(), TODAY.getMonth(), TODAY.getDay(), 24, 59, 59);
const END_OF_TOMORROW = new Date(TODAY.getFullYear(), TODAY.getMonth(), TODAY.getDay() + 1, 24, 59, 59);

let datesBeforeToday = [];
let datesBetweenNowAndEndOfDate = [];
let datesWithTomorrowsDate = [];

for (var i=0; i<arrayOfDates.length; i++)
{
    var dateInArray = new Date(arrayOfDates[i]);
    // Before today
    if (TODAY > dateInArray)
    {
        datesBeforeToday.push(dateInArray);
    }
    // between now - end of today
    else if (END_OF_TODAY >= dateInArray)
    {
        datesBetweenNowAndEndOfDate.push(dateInArray);
    }
    // between end of today - end of tomorrow
    else if (END_OF_TOMORROW >= dateInArray)
    {
        datesWithTomorrowsDate.push(dateInArray);
    }
}

// 1) Number of dates before 'now'
console.log(datesBeforeToday.length);
// 2) Number of dates between 'now' and the end of the current date
console.log(datesBetweenNowAndEndOfDate.length);
// 3) Number of dates with tomorrow date
console.log(datesWithTomorrowsDate.length);

【讨论】:

  • 你是对的,它工作得很好!非常感谢您的帮助!
【解决方案2】:

这是不使用 moment.js 的一种方法:

var dates = [
"11/02/2018 11:22:28",
"02/02/2019 11:22:28",
"04/04/2019 11:22:28",
"10/03/2019 11:22:28",
"11/02/2019 11:22:28"
];

var res = { before: 0, tomorrow: 0, after: 0 }
var tomorrow00 = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
tomorrow00.setHours(0, 0, 0, 0);
var tomorrow24 = new Date(new Date().getTime() + 48 * 60 * 60 * 1000);
tomorrow24.setHours(0, 0, 0, 0);
tomorrow24.setTime(tomorrow24.getTime() - 1)

dates.forEach((date)=>{
    var current = new Date(date);
    if ((current >= tomorrow00) && (current <= tomorrow24))
        res.tomorrow++;
    else if (current < Date.now())
        res.before++;
    else if (current > Date.now())
        res.after++
})

console.log(res);

这是一种解决 USING moment.js 的方法

var dates = [
"11/02/2018 11:22:28",
"02/02/2019 11:22:28",
"04/04/2019 11:22:28",
"10/03/2019 11:22:28",
"11/02/2019 11:22:28"
];

var res = { before: 0, tomorrow: 0, after: 0 };
const tomorrow00 = moment().add(1, 'day').startOf('day');
const tomorrow24 = moment().add(1, 'day').endOf('day');

dates.forEach((date)=>{
    var current = moment(date, "MM/DD/YYYY HH:mm:ss");

    if ((current.isAfter(tomorrow00)) && (current.isBefore(tomorrow24)) )
        res.tomorrow++;
    else if (current.isBefore(moment().startOf('day')))
        res.before++;
    else if (current.isAfter(moment().endOf('day')))
        res.after++
})

console.log(res);
&lt;script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"&gt;&lt;/script&gt;

【讨论】:

  • 谢谢,它有效。是的,没有必要使用 moment.js 感谢您指出这一点!
  • 很高兴它成功了。对你有用,请采纳/点赞。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 2014-07-28
  • 1970-01-01
相关资源
最近更新 更多