【问题标题】:JavaScript - Get array of dates between start and end datesJavaScript - 获取开始日期和结束日期之间的日期数组
【发布时间】:2021-03-31 02:05:40
【问题描述】:

我得到了这段代码(来自 GitHub)它完全符合我的要求,除了生成的月份比 JavaScript 代码中的月份提前一个月。此代码中的月份是 02(二月),但屏幕上生成的月份是 03(三月)。我在这里没有看到什么?日期是这样写的吗?

<script>
// Returns an array of dates between the two dates
var getDates = function(startDate, endDate) {
  var dates = [],
      currentDate = startDate,
      addDays = function(days) {
        var date = new Date(this.valueOf());
        date.setDate(date.getDate() + days);
        return date;
      };
  while (currentDate <= endDate) {
    dates.push(currentDate);
    currentDate = addDays.call(currentDate,1);
  }
  return dates;
};

// Usage
var dates = getDates(new Date(2021,02,22), new Date(2021,02,27));                                                                                                           
dates.forEach(function(date) {
  document.write(date);
  console.log(date);
});
</script>

【问题讨论】:

  • new Date() 中,月份数字从 0 到 11,而不是从 1 到 12。
  • 嗨 Pointy,为什么它只影响月份?我必须编写一个函数来更改月份吗?
  • 这就是 JavaScript 25 年来一直工作的方式。我不能说这是个好主意,但祝你好运:)
  • 当我从 Jquery 日期选择器中获取值时,最好的写法是什么?会不会像 document.getElementByName().innerHTML = startDate.getMonth() - 1;

标签: javascript arrays date


【解决方案1】:

正如 Timespider 指出的那样,getDates 函数是可以的。创建新的Date 值时必须小心,因为在Date 构造函数中月份是从0 到11:

// Usage
var fromFeb22 = new Date(2021,1,22);
var toFeb27 = new Date(2021,1,27);
var dates = getDates(fromFeb22 , toFeb27 );                                                                                                           
dates.forEach(function(date) {
  document.write(date);
  console.log(date);
});

更新:使用 jQuery 的 DatePicker

jQuery 的 DatePicker 小部件有一个 getDate 方法,它返回一个可以直接在函数中使用的 Date 对象(无需使用 new Date()):

// Usage
var fromDate = $("#fromDate").datepicker("getDate");
var toDate = $("#toDate").datepicker("getDate");
var dates = getDates(fromDate, toDate);                                                                                                           
dates.forEach(function(date) {
  document.write(date);
  console.log(date);
});

使用标准日期输入

标准日期输入将日期返回为格式为“yyyy-MM-dd”的字符串,但很容易将其解析为日期对象:

// Usage
var fromDate = new Date(document.querySelector("#fromDate").value);
var toDate = new Date(document.querySelector("#toDate").value);
var dates = getDates(fromDate, toDate);                                                                                                           
dates.forEach(function(date) {
  document.write(date);
  console.log(date);
});

【讨论】:

  • 嗨 Roimer,当我从 datepicker 的日期中获取日期时,它们已经是正确的,所以当他们运行发布的代码时,它们变得不正确,这就是为什么我问 Pointy 这样的事情是否会恢复它@ 987654330@ document.getElementByName().innerHTML = startDate.getMonth() - 1;抱歉,这些 cmets 和突出显示代码有问题
  • 你在使用 jQuery DatePicker 小部件吗?(api.jqueryui.com/datepicker/#method-getDate) 它有一个getDate 方法,可以为你提供一个已经正确的Date 对象,不需要“更正”月。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
相关资源
最近更新 更多