두 날짜 내에서 임의의 날짜 배열을 생성하는 우아한 방법


88

두 달을 표시하는 날짜 선택기가 있고 보이는 각 달에서 3 개의 날짜를 무작위로 선택하고 싶습니다.

  $('.date').datepicker({
    minDate: new Date(),
    dateFormat: 'DD, MM, d, yy',
    constrainInput: true,
    beforeShowDay: processDates,
    numberOfMonths: 2,
    showButtonPanel: true,
    showOn: "button",
    buttonImage: "images/calendar_icon.jpg",
    buttonImageOnly: true    
  });

여기 내 계산이 있습니다

var now = new Date();
var nowTime = parseInt(now.getTime()/1000);
var randomDateSet = {};

function getRandomSet(y,m) {
  var monthIndex = "m"+y+""+m; // m20121 for Jan
  if (randomDateSet[monthIndex]) return randomDateSet[monthIndex];
  // generate here
.
. - I need this part
.
  return randomDateSet[monthIndex];
}

function processDay(date) { // this is calculated for each day so we need a singleton for the array
  var dateTime = parseInt(date.getTime()/1000);
  if (dateTime <= (nowTime-86400)) {
    return [false]; // earlier than today
  }
  var m = date.getMonth(), d = date.getDate(), y = date.getFullYear();
  var randomDates = getRandomSet(y,m);

  for (i = 0; i < randomDates.length; i++) {
    if($.inArray((m+1) + '-' + d + '-' + y,randomDates) != -1 || new Date() > date) {
      return [true,"highlight","Some message"];
    }
  }
  return [true,"normal"]; // ordinary day
}

답변:


254

내가 뭔가를 놓치고 있을지도 모르지만, 그렇지 않습니까?

function randomDate(start, end) {
    return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
}

randomDate(new Date(2012, 0, 1), new Date())

1
아마도-매월 중복되지 않고 3 일 동안 그렇게 할 수 있습니까?
mplungjan

1
하여 중복 동일한 날짜를 생성하는 의미합니까? 아니요,이 코드는 이 경우를 처리 하지 않습니다 . 이론적으로 동일한 날짜를 생성 할 수 있습니다 (특히 시간을자를 때). 그러나 중복을 제거하는 것은 어렵지 않습니다.
Tomasz Nurkiewicz

2
주어진 날짜 이전 (또는 이후) 며칠 전에 날짜를 가져 오는 관련 기능 : function randomDateAfterDate(start, days) { return new Date(start.getTime() + (Math.random()*days*24*60*60*1000)); }
Autumn Leonard


6

Moment.js && @Demven Weir의 대답을 사용하여 "03/02/1975"와 같은 문자열 값을 얻습니다.

moment(new Date(+(new Date()) - Math.floor(Math.random()*10000000000)))
.format('MM/DD/YYYY');

참고 : 생산 연도를 늘리려면 한 번에 0을 계속 추가하십시오.


1

경계 날짜를 정수 ( Date.getTime()) 로 변환 한 다음을 사용 Math.random()하여 주어진 경계 내에서 임의의 날짜를 생성 할 수 있습니다. 그런 다음에 다시 갈 Date와 객체 Date.setTime().


x 번 반복하지 않고 (여기서는 x = 3)?
mplungjan

루프와 이미 생성 된 날짜 배열을 추가하여 새 날짜를 생성 할 때 확인하는 문제입니다. 아니면 내가 뭔가를 놓치고 있습니까?
bububaba
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.