2012-07-12 3 views
3

이것은 주어진 이벤트의 첫 번째 날짜를 설정 한 다음 반복 기간을 설정할 수있는 시스템을위한 것입니다.원본 날짜가 지정된 연속 날짜를 효율적으로 계산하는 방법

예 : 지금부터 1 주일 간 날짜를 정했습니다. 19/07/2012에 고양이를 우유와 함께 넣어야한다는 것을 알고 있습니다. 또한 주간 통보로 설정 했으므로 앞으로 몇 주가 지나면 같은 통보를 받고 싶습니다.

원래 날짜가 내 데이터베이스에 있는데, 1 주째에는 괜찮지 만 2 주째에는 원래 날짜와 1 주일을 다시 입력해야합니다.

직면 해 보일 수도 있지만 윤년과 여러 재발 빈도 (2 주, 1 개월, 1 년 등)를 고려해야합니다.

저는 이것을 자바 스크립트 구현으로 유지하고 싶습니다. 빠른 것이기 때문에 데이터베이스의 날짜를 업데이트하는 것보다 코드가 덜 필요하기 때문입니다. 어쩌면 달성 할 수 없을지도 모릅니다. 어떤 포인터라도 우수 할 것입니다. 나는 거기에서, 각각 다른 경우에 추가하는 시간의 양을 반환 아래 작성한

Given a start date , how to calculate number of years till current date in javascript

Given a date, how can I efficiently calculate the next date in a given sequence (weekly, monthly, annually)?

업데이트 :

나는 이러한 출발점이 될 것 같아요 나는 (아마 최고의 솔루션을 어떻게 할 것인지

var strDate = $(this).find('.next').text(); 
      var frequency = $(this).find('.occurs').text(); 
      var frmDate = getDateObject(strDate); 
      var toDate = new Date(); 

      var days = parseInt(Math.floor((frmDate - toDate)/86400000)); 

      if(days < 0) { 
       // find out how many WHOLE 'frequencies' have passed 
       var weeks = Math.ceil(0 - (days/7)); 
       var months = Math.ceil(0 - (monthDiff(toDate,frmDate))); 
       var years = Math.ceil(months/12); 
       //alert(days + '/' + weeks + '/' + fortnights + '/' + months + '/' + quarters + '/' + years); 

       if(frequency == 'Weekly') { frmDate.add(weeks).weeks(); } 
       if(frequency == 'Fortnightly') { frmDate.add(weeks*2).weeks(); } 
       if(frequency == 'Monthly') { frmDate.add(months).months(); } 
       if(frequency == 'Quarterly') { frmDate.add(months*3).months(); } 
       if(frequency == 'Annually') { frmDate.add(years).years(); } 

       var newdate = frmDate.toString("dd/MM/yyyy"); 
       //alert(newdate); 

       $(this).find('.next').text(newdate); 
      } 
+0

내가이의 데모를 볼 수 아래 바이올린에 동일하게 테스트 할 수 있습니다

var someDate = new Date(); for(var i = 0 ; i < 7 ; i++) { someDate.setDate(someDate.getDate() + 1); console.log(someDate) } 

일부 원시 아이디어를 다음 코드를 확인하시기 바랍니다 2012 년에?:) 나는 같은 문제에 직면했고 그것의 재발 부분을 구현하는 데 문제가있었습니다. 어떤 도움이라도 감사 할 것입니다. 감사. – Superman

답변

0

:

http://sql-plsql.blogspot.com/2010/07/dateadd.html

당신은하지 않습니다 대부분의 Date 함수가이를 처리하기 때문에 윤년과 같은 특별한 날짜에 대해 걱정해야합니다.

다른 방법으로 제안 된대로 getDate(), getMonth()를 사용할 수 있습니다. var today = new Date(); today.setDate (today.getDate() + numberOfDaysToAdd); 당신이 그것을 완료 한 경우

+0

여기 키가 몇 일 동안 추가 될지 알 것입니다. 따라서 2012 년 12 월 7 일에 주간 일정이 주어지면, 오늘까지의 첫 데이트 이후로 얼마나 많은 주 전체가 발생했는지 계산할 수 있습니까? – Midwinter

+0

기다려주십시오. 주어진 두 날짜 사이의 주 단위를 찾고 싶습니까? 그게 네 질문이야? – roymustang86

+0

아니요.하지만 처음에 계산하지 않으면 추가 할 시간을 알 수 없으므로 요구 사항이 될 것입니다. 여기 완전히 잘못된 포리스트에 있지 않는 한. – Midwinter

0

가, 난 그냥 해요 COM : 난 그냥 아래의 대답을 사용할 수 있습니다 지금 당장 시작하는 것)은 처음 날짜부터 시작하여 루프를 사용하는 것입니다 : while 관찰중인 날짜가 현재 날짜보다 작 으면 관찰 된 날짜를 일주일 (2 주, 1 개월, 1 년 등)만큼 증가시킵니다. 현재 날짜에 도착하면 이벤트가 발생합니다. 그렇지 않으면 다른 날입니다.

당신은 각각 개월 동안 set/getMonthset/getFullYear를 사용하여 하루 날짜, 일주일 동안 같은 +7를 증가 date.setDate(date.getDate()+1); 같은 것들을 사용할 수 있습니다. 이에 대한 SQL 구현 DATEADD 사용하는 것입니다 당신이 범위에서 값을 제공하는 경우, JS는 포장한다 (그래서 월 32 일이됩니다 4 월 1 일) 또한

+0

저는 자바 스크립트로 오늘 날짜와 시간을 가져 오는 두 개의 날짜 객체를 가져올 수 있다고 생각합니다. 그런 다음 몇 주 (또는 몇 달 또는 몇 년 등)에 해당 시간을 반환하고 추가 할 수 있습니까? – Midwinter

관련 문제