2012-10-23 2 views
0

내가하려는 것은 이전 7 일간의 날짜를 포함하는 배열을 만드는 것입니다. 아래 코드는 나를 위해이 작업을 수행합니다. 그러나 (now.getDate() - index)가 1보다 작 으면 이전 달로 날짜를 다시 이동하지 않고 단순히 음의 값을 가져옵니다.지난 주 날짜 배열을 자바 스크립트 getDate에 저장합니다.

나는 그것을 (now.setDate (now.getDate() - index)로 고치려고했지만 그것을 고치려고했지만 유닉스 시간을 얻고있는 것 같았고, 정확한 시간이 아닌 것 같다. 당신은 (현재 날짜 마이너스 칠일가 0보다 큰 있기 때문에 깨진 보이지 않는 것, 기억) 문제를보고 싶다면

var bars = new Array(); 
    var index = 0; 
    var NumFields = data.length - 2; 
    var now = new Date(); 
    var date = new Array(); 

    for(var i=0;i<NumFields;i++) { 
     $('.graph').append("<div class=\"bar\"></div>"); 
    } 

    $('.graph > .bar').each(function() { 
     var currentData = data[index]; 
     $(this).attr('value', currentData); 
     bars.push(currentData); 
     date.push(now.getDate() - index); 
     index++;   
    }); 

, 다음 habitic.com로 이동을 클릭 "실행."

도움 주셔서 감사합니다. ... 나는 매우 혼란 스러워요, 이것은 도움을 요청 요구하는만큼 나를 난처한 상황에 빠진 첫 번째 문제입니다

+0

월 및 연도 크로스 오버로 인해 당신이 생각하는 것보다,이 문제는 더 복잡하다. 이 작업을 수행하려면 타임 스탬프로 변환해야합니다. 내가 너에게 무언가를 던져 줄 수 있는지 알 겠어. – mVChr

답변

1

아니요, now.setDate(now.getDate() - index) 실제로 엄밀한 접근 방식이었습니다. 그러나 새로운 날은 반환하지 않지만, now Date 인스턴스의 새로운 [internal] 타임 스탬프입니다. 확인이 두 단계 :

now.setDate(now.getDate() - 1); // sets the date to the previous day each time 
date.push(now.getDate()); 
+0

이것은 훌륭하게 작동하는 것으로 보입니다. 이전 달로 넘어간 날짜로 테스트했습니다! 마지막으로, 오늘 날짜도 포함 시키려면 어떻게해야합니까? 그래서, 오늘 + 이전 6 일. 나는 그것을 이해할 수있을 것이라고 확신하지만, 내 뇌는 순간적으로 소각된다. – Jerad

+0

* 감소시키기 전에 *를 눌러 루프 카운터로 생각하십시오. – Bergi

+0

굉장! 다시 한번 감사드립니다. – Jerad

-1

이 사용해보십시오 :

day = 24*60*60*1000 
new Date(now.getTime()-index * day); 

now.getTime()은 (밀리 초) 이후로 시간을 반환 신기원 (1970 년 1 월 1 일 자정 GMT). day = 24*60*60*1000은 하루 (24 시간, 60 분/시간, 60 초/분, 1000 밀리 초/초)의 밀리 초 수를 계산합니다. 오프셋 (offset)을 곱해서 (실수하지 않는다면 index), 밀리 초 단위로 오프셋을 얻습니다. getTime()에서 빼면 원하는 날짜에 해당 시간대의 밀리 초 수가 나옵니다. 그런 다음 Date() 생성자에서 해당 날짜와 시간에 대한 실제 Date() 객체를 가져올 수 있습니다.

+0

왜 downvote? 이것은 100 % 정확할뿐만 아니라 설명됩니다. – FrankieTheKneeMan

+0

100 % 정확하지 않습니다. 시간대 문제가 있습니다. 모든 날이 24 시간이되는 것은 아닙니다. – Bergi

+0

@Bergi - 시간대 문제가 없습니다. 모든 Data 객체가 현지화되어 있습니다. 그리고 모든 날은 24 시간 동안과 구별 할 수 없습니다.그레고리오 력 (컴퓨터를 사용할 수있는 모든 곳에서 사용되고 사용되는)은이 문제를 처리하기 위해 매일 (정확히는 위의 증가분으로 측정)마다 4 년마다 추가됩니다. 당신이 옳다면, 주기적으로, 도약 초가 추가됩니다.이 응용 프로그램은 31536000에서 일년에 평균 7 초 (이 응용 프로그램에만 영향을 미칩니다)가됩니다. 따라서 100 % 정확하지는 않습니다 - 단지 99.99998 % 정확합니다 . 어느 정도면 충분합니다. – FrankieTheKneeMan

0
날짜 을 설정

// 다음 배열에 Date 객체의 GETDATE 값을 누릅니다.

function pastweek(d){ 
    var now= d || new Date(), 
    i= 6, 
    dates= [now.getDate()]; 
    while(i--){ 
     now.setDate(now.getDate()-1); 
     dates.push(now.getDate()); 
    } 
    return dates.reverse(); 
} 

/*

pastweek(new Date(2012,9,5)) 
returned value: (Array) 
29,30,1,2,3,4,5 

* */

/

/*

pastweek() 
returned value: (Array) 
17,18,19,20,21,22,23 

나는 맞게이를 활용하는 당신에게 그것을 떠날거야

-1

귀하의 컨텍스트,하지만 여기에 당신이 어떻게 얻을 수있어 오늘 (now)를 가정 날짜 그는 지난 주 2012년 1월 3일입니다 :

var now = new Date(2012, 0, 3), 
    DAY_MS = 86400000, // 1 day in milliseconds 
    dates = []; 

for (var i = 0; i < 7; i++) { 
    dates.push(new Date(now.getTime() - (i * DAY_MS))); 
} 

console.log(dates); 

// outputs: 
// [Tue Jan 03 2012 00:00:00 GMT-0800 (PST), 
// Mon Jan 02 2012 00:00:00 GMT-0800 (PST), 
// Sun Jan 01 2012 00:00:00 GMT-0800 (PST), 
// Sat Dec 31 2011 00:00:00 GMT-0800 (PST), 
// Fri Dec 30 2011 00:00:00 GMT-0800 (PST), 
// Thu Dec 29 2011 00:00:00 GMT-0800 (PST), 
// Wed Dec 28 2011 00:00:00 GMT-0800 (PST)] 
+0

모든 요일은 86400000 ms입니다. – Bergi