将日期范围转换为 [重复] 之间所有日期的数组

Posted

技术标签:

【中文标题】将日期范围转换为 [重复] 之间所有日期的数组【英文标题】:Convert range of dates to an array with all days between [duplicate] 【发布时间】:2013-03-27 12:57:45 【问题描述】:

我遇到了一个问题。

我有一个数据范围数组:

var range_date_off=['31/03/2013','03/04/2013'];

我需要把它转换成这个:

var dates_off=['31/03/2013','01/04/2013','02/04/2013','03/04/2013'];

我开始用循环来做,但是当月份跳到另一个时,问题就变成了,知道吗?

【问题讨论】:

向我们展示您的尝试。 javascript - get array of dates between 2 dates 【参考方案1】:

我在这里使用date.js

range = ['31/03/2013','03/04/2013']

begin = Date.parseExact(range[0], 'dd/MM/yyyy')
end   = Date.parseExact(range[1], 'dd/MM/yyyy')

dates = []

while(begin <= end) 
    dates.push(begin.toString("dd/MM/yyyy"))
    begin.addDays(1)

结果:

["31/03/2013", "01/04/2013", "02/04/2013", "03/04/2013"]

【讨论】:

非常感谢!它有效【参考方案2】:

这是使用 regx 解析日期

var range_date_off=['31/03/2013','03/04/2013'];
var d1 = parseDate(range_date_off[0])
var d2= parseDate(range_date_off[1])

var days= [];
for (var dt = d1; dt <= d2; dt.setDate(dt.getDate() + 1)) 
    var fdt = new Date(dt)
    days.push ( fdt.getDate() + "/" + (fdt.getMonth() + 1) + "/" + fdt.getFullYear());


function parseDate(input) 
  var parts = input.match(/(\d+)/g);
  return new Date(parts[2], parts[1]-1, parts[0]); 

【讨论】:

值得一提(对于可能想知道这是如何工作的人),JS Date 对象自己处理超出边界的问题 - 如果在 3 月 31 日调用 dt.setDate(dt.getDate() + 1),那么以这种方式添加一天会自动切换到4 月 1 日。【参考方案3】:

您可以使用 UTC 算法来做到这一点:

var start = Date.UTC(2013, 2, 31);
var end = Date.UTC(2013, 3, 3);
var currDate = start;
var dates = [];
while (currDate <= end) 
    var d = new Date(currDate);
    dates.push((d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear()));
   currDate += (1000 * 60 * 60 * 24);

注意,javascript 月份从 0 开始!

http://jsfiddle.net/hKxzw/

【讨论】:

不是每一天都有 86,400 秒。【参考方案4】:

月份检查 .... 如果月份 = [1,3,5,6,7,8,10,12] 不得大于 31 天,以此类推 ....

【讨论】:

以上是关于将日期范围转换为 [重复] 之间所有日期的数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP:返回数组中两个日期之间的所有日期[重复]

将字符串转换为日期时间错误 [重复]

将unix时间戳转换为javascript日期对象[重复]

如何使用python将不同格式的日期转换为一种格式[重复]

在日期范围SQL之间选择PHP脚本中的数据[重复]

将 Pandas 系列日期时间“月份”数字转换为月份文本 [重复]