2016-02-22 87 views
0

我想在日曆日期內顯示一些數據。我給它一個開始日期和結束日期。我只希望它在這些日期內顯示。我一直在試圖做到這一點,但我似乎無法讓它工作正確。我以爲我擁有它但錯了。獲取數據僅在日期範圍內使用javascript顯示

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" ],... 

林不知道怎麼回事,要做到這一點,因爲我已經嘗試了許多不同的方式和似乎沒有任何相應的工作。

+0

這是什麼呢?(d> = myPromoEnd) – Ray

回答

0

試試這個爲for (var i =0; i < Object.keys(obj).length ; i++) 你無法得到一個對象的大小,只是使用.length。 和RobG說的,你需要使用.push()將一個對象添加到數組中。 希望這有助於:

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

+0

這些都是偉大的答案,但由於某種原因,一旦進入到十二月在這裏打破 – Tom

+0

是我的完整JSON 「 「的促銷活動」: \t [ \t \t \t \t { \t \t \t「 ID 「: 」冬天「, \t \t \t 」日期範圍「: 」12/1「, 」1/13「], \t \t \t 」稱號「:」 提前切斷裏維埃拉」, \t \t \t 「說明」: 「爲您提供個性化服務」, \t \t \t 「體」: 「book.php中」, \t \t \t 「顏色」: 「#3690ce」, \t \t \t 「將backgroundImage」:「和backgroundImage。 SVG」, \t \t \t 「背景」: 「background.svg」, \t \t \t 「mainImage」: 「main.svg」 \t \t} \t]」 這是一個例子。其他所有月份都採用相同的格式。 – Tom

+0

適合我工作 https://jsfiddle.net/geradrum/c2xkntsh/3/ – Gerardo

2

目前還不清楚哪些數據對象實際上看起來像的「JSON」是無效的。

您似乎已經有了一個好的開始,但在將範圍轉換爲日期時迷失了方向。

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++) { 

我假設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]; 

下一位是OK:

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]; 

替換的值objDataOBJ [I],你可能想將其添加到陣列,所以:

 objData.push(obj[i]);