使用 javascript 获取仅在日期范围内显示的数据

Getting data to only show within a date range using javascript

本文关键字:范围内 显示 数据 日期 javascript 获取 使用      更新时间:2023-09-26

我正在尝试显示日历日期内的一些数据。我给它一个开始日期和一个结束日期。我只希望它在那些日期内显示。我一直在尝试这样做,但我似乎无法使其正常工作。我以为我有它,但错了。

var objData = [];
var month = [ "january","february","march", "april", "may", "june", "july", "august", "september", "October", "november", "december"];
var d = new Date( );
var currDate = d.getDate();
var currMonth = d.getMonth();
var currYear = d.getFullYear();
var currPromoIndex;
for (var i =0; i < obj.length; i++)
{
    var start = obj[i].dateRange[0];
    var end = obj[i].dateRange[1];
    var promoStartMonth = start.slice( 0,2 ).replace("/", "");
    var promoStartDay = start.slice( start.indexOf("/"), start.length ).replace("/", "");
    var promoEndMonth = end.slice( 0,2 ).replace("/", "");
    var promoEndDay = end.slice( end.indexOf("/"), end.length ).replace("/", "");
    var myPromoStart = new Date( currYear, promoStartMonth-1, promoStartDay);
    var myPromoEnd = new Date( currYear, promoEndMonth-1, promoEndDay);
    if ( ( ( d > myPromoStart ) && ( d < myPromoEnd) ) || ( d >= myPromoEnd ) ) 
    {
        objData = obj[i];
        console.log(obj[i]);
    } 
}

我的日期范围存储在 json 中,如下所示。

"dateRange" : [ "4/13", "5/12" ],...

我不确定还能怎么做,因为我尝试了许多不同的方法,但似乎没有什么相应的工作。

目前还不清楚数据对象的实际外观,"JSON"无效。

您似乎已经开了个好头,但在将范围转换为日期时迷失了方向。

var objData = [];
var month = [ "january","february","march", "april", "may", "june", "july", "august", "september", "October", "november", "december"];

不使用 month 变量,因此没有必要。下一部分似乎还可以:

var d = new Date( );
var currDate = d.getDate();
var currMonth = d.getMonth();
var currYear = d.getFullYear();
var currPromoIndex;
for (var i =0; i < obj.length; i++) {

我假设obj[i].dateRange["4/13", "5/12"].

    var start = obj[i].dateRange[0];
    var end = obj[i].dateRange[1];
    var promoStartMonth = start.slice( 0,2 ).replace("/", "");
    var promoStartDay = start.slice( start.indexOf("/"), start.length ).replace("/", "");

如果使用正则表达式并拆分,则从范围值中提取月份和日期会更简单:

    var start = obj[i].dateRange[0].split(/'D/);
    var end = obj[i].dateRange[1].split(/'D/);
    var promoStartMonth = start[0];
    var promoStartDay = start[1];
    var promoEndMonth = end[0];
    var promoEndDay = end[1];

下一点是确定的:

    var myPromoStart = new Date( currYear, promoStartMonth-1, promoStartDay);
    var myPromoEnd = new Date( currYear, promoEndMonth-1, promoEndDay);

但是这里的逻辑是有缺陷的(并且有太多的括号,不容易阅读):

    if (((d > myPromoStart) && (d < myPromoEnd)) || (d >= myPromoEnd)) {

为什么||?这将包括myPromoEnd之后的所有日期。如果您希望范围包含结束日期,请使用(并删除大部分括号):

    if (d >= myPromoStart && d <= myPromoEnd) {

然后您遇到以下问题:

        objData = obj[i];

这将 objData 的值替换为 obj[i],您可能希望将其添加到数组中,因此:

        objData.push(obj[i]);

试试这个for (var i =0; i < Object.keys(obj).length ; i++)您无法仅使用 .length 获取对象的大小。以及 RobG 所说的,您需要使用 .push() 将对象添加到数组中。希望这有帮助:

https://jsfiddle.net/geradrum/c2xkntsh/