Advertisement
Guest User

Untitled

a guest
Sep 21st, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.59 KB | None | 0 0
  1. // Basic Random Date Generator
  2. function randomInt(a = 0, b = 0) { return (a + window.crypto.getRandomValues(new Uint8Array(1))[0] % Math.abs(b - a + 1)); }
  3.  
  4. function log(json) {
  5. for (key in arguments) {
  6. let string = JSON.stringify(arguments[key], null, ' ');
  7. document.body.innerHTML += `<pre>${string}</pre>&nbsp;`;
  8. }
  9. console.log(...arguments);
  10. document.body.innerHTML += '<br>';
  11. }
  12.  
  13. function getDaysInMonth (month, year) {
  14. const isLeapYear = year % 4 === 0;
  15. switch(month) {
  16. case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; break;
  17. case 4: case 6: case 9: case 11: return 30; break;
  18. case 2: return isLeapYear ? 29 : 28;
  19. }
  20. }
  21.  
  22. function getRandomDayInRange (start, end) {
  23. if (typeof start !== 'object' || typeof end !== 'object') { throw new Error('Incorrect parameter type. `start` and `end` need to be objects with properties `day`, `month` and `year`.'); }
  24. if (!start.day) { throw new Error('`start.day` needs to be defined.')}
  25. if (!start.month) { throw new Error('`start.month` needs to be defined.')}
  26. if (!start.year) { throw new Error('`start.year` needs to be defined.')}
  27. if (!end.day) { throw new Error('`end.day` needs to be defined.')}
  28. if (!end.month) { throw new Error('`end.month` needs to be defined.')}
  29. if (!end.year) { throw new Error('`end.year` needs to be defined.')}
  30.  
  31. const year = randomInt(start.year, end.year);
  32.  
  33. const isStartYear = year === start.year;
  34. const isEndYear = year === end.year;
  35.  
  36. const isStartYearButNotSameAsEndYear = isStartYear && !isEndYear;
  37. const isEndYearButNotSameAsStartYear = isEndYear && !isStartYear;
  38. const isNeitherStartNorEndYear = !isStartYear && !isEndYear;
  39.  
  40. if (isStartYearButNotSameAsEndYear) { end.month = 12; }
  41. if (isEndYearButNotSameAsStartYear) { start.month = 1; }
  42. if (isNeitherStartNorEndYear) { start.month = 1; end.month = 12; }
  43.  
  44. const month = randomInt(start.month, end.month);
  45.  
  46. const isStartMonth = month === start.month;
  47. const isEndMonth = month === end.month;
  48.  
  49. const isFirstMonthButNotLast = isStartYear && isStartMonth && !isEndYear && !isEndMonth;
  50. const isLastMonthButNotFirst = isEndYear && isEndMonth && !isStartYear && !isStartMonth;
  51. const isNotFirstMonth = isStartYear && !isStartMonth || !isStartYear;
  52. const isNotLastMonth = isEndYear && !isEndMonth || !isEndYear;
  53.  
  54. if (isFirstMonthButNotLast) { end.day = getDaysInMonth(month, year); }
  55. if (isLastMonthButNotFirst) { start.day = 1; }
  56. if (isNotFirstMonth) { start.day = 1; }
  57. if (isNotLastMonth) { end.day = getDaysInMonth(month, year); }
  58. if (isNeitherStartNorEndYear) { start.day = 1; end.day = getDaysInMonth(month, year); }
  59.  
  60. const day = randomInt(start.day, end.day);
  61. return [day, month, year];
  62. }
  63.  
  64. function parseDate (dates) {
  65. const DATE_REGEX = /\d{1,2}\-\d{1,2}\-\d{4}/;
  66. if (typeof startDate !== 'string' || typeof endDate !== 'string') { throw new Error('Incorrect input type'); }
  67. if (!(DATE_REGEX.test(startDate) && DATE_REGEX.test(endDate))) { throw new Error ('Incorrect date format'); }
  68.  
  69. let [startDay, startMonth, startYear] = startDate.split('-').map(_ => parseInt(_));
  70. let [endDay, endMonth, endYear] = endDate.split('-').map(_ => parseInt(_));
  71.  
  72. return [
  73. { day: startDay, month: startMonth, year: startYear },
  74. { day: endDay, month: endMonth, year: endYear }
  75. ];
  76. }
  77.  
  78. // ===========================================================================
  79.  
  80. let [ startDate, endDate ] = ['10-06-2016', '20-06-2016'];
  81.  
  82. let [ start, end ] = parseDate(startDate, endDate);
  83.  
  84. const LIMIT = 20;
  85. for (let i = 0; i < LIMIT; i++) {
  86. let [day, month, year] = getRandomDayInRange(start, end);
  87. log(day, month, year);
  88. }
  89.  
  90. log('Thanks for trying this out!');
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement