使用 javascript 以 utc 格式在开始日期和结束日期之间生成随机日期

问题描述 投票:0回答:2

如何使用 javascript 以 utc 格式在两个日期之间生成随机日期? 示例:开始日期为 23-01-25 02:07:04,结束日期为 23-02-25 02:07:04 我想要一个开始日期和结束日期之间的随机日期列表,如下所示: [23-01-26 02:07:04,23-02-02 02:07:04,.....]

这是我的 Javasxript 代码:

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

const d = randomDate(new Date(2023, 04, 01), new Date(2023, 04, 12));
console.log(d);

但它给出了错误的输出:

2023-05-08T17:09:26.445Z

任何人都可以建议我一个正确的方法来获得解决方案

javascript date random momentjs
2个回答
1
投票

正如其他人所提到的,JavaScript 中的月份是从 0-11 索引的。

参见:

Date.prototype.setMonth()

monthValue

表示月份的整数:0 表示一月,1 表示二月,依此类推。

const
  startDate = new Date(2023, 4, 1), // 2023-05-01
  endDate = new Date(2023, 4, 12);  // 2023-05-12

// Generate 1 million random dates between the provided range...
for (let i = 0; i < 1_000_000; i++) {
  const randomDate = getRandomDate(startDate, endDate);
  if (randomDate < startDate || startDate > endDate) {
    throw new Error(`Date out of range: ${randomDate}`);
  }
}

// Should get here if there are no range errors...
console.log('No errors...');

function getRandomDate(startDate, endDate) {
  if (arguments.length === 1) {
    endDate = new Date(startDate.getTime());
    startDate = new Date();
  }
  return new Date(getRandomInt(startDate.getTime(), endDate.getTime()));
}

function getRandomInt(min, max) {
  if (arguments.length === 1) {
    max = min;
    min = 0;
  }
  return Math.floor(Math.random() * (max - min + 1)) + min;
}


0
投票

也许你应该将日期转换为时间格式,并计算一个在两个数字范围内的随机数。

function randomDate(start, end){
  var start_date_arr = start.split('-');
  if(start_date_arr[0].length == 2){
     start_date_arr[0] = '20' + start_date_arr[0]
  }
  var start_date = new Date(start_date_arr[0], start_date_arr[1] - 1, start_date_arr[2].substr(0, 2), start_date_arr[2].substr(3, 2), start_date_arr[2].substr(6, 2), start_date_arr[2].substr(9, 2));
  var start_time = start_date.getTime();

  var end_date_arr = end.split('-');
  if(end_date_arr[0].length == 2){
     end_date_arr[0] = '20' + end_date_arr[0]
  }
  var end_date = new Date(end_date_arr[0], end_date_arr[1] - 1, end_date_arr[2].substr(0, 2), end_date_arr[2].substr(3, 2), end_date_arr[2].substr(6, 2), end_date_arr[2].substr(9, 2));
  var end_time = end_date.getTime();


  var random_time = Math.floor(Math.random() * (end_time - start_time + 1)) + start_time;
  var random_date = new Date(random_time);

  console.log([start, end, random_date.toISOString().slice(0, 19).replace('T', ' ')]);
  return random_date;
}

 randomDate('23-01-25 02:07:04', '23-02-25 02:07:04');

© www.soinside.com 2019 - 2024. All rights reserved.