给定一个开始日期和结束日期,创建一个包含这两个日期之间日期的数组
Given a start and end date, create an array of the dates between the two
现在,我的页面上有这个:
<script type="text/javascript">
$(document).ready(function () {
var days = [
{ Date: new Date($('#hfEventStartDate').val()) },
{ Date: new Date($('#hfEventEndDate').val()) }
];
});
</script>
<asp:HiddenField ID="hfEventStartDate" runat="server" />
<asp:HiddenField ID="hfEventEndDate" runat="server" />
我在页面加载时设置hfEventStartDate和hfEventEndDate。现在用我的代码,它创建了一个有两个值的数组:开始日期和结束日期。但我还想让数组包含所有中间的日期。我该怎么做呢?
您可以使用setDate(getDate() + 1)
来'迭代'所有天:http://jsfiddle.net/pimvdb/4GeFD/1/.
$("#hfEventStartDate").val(new Date - 24 * 3600 * 1000 * 7 - 1);
$("#hfEventEndDate").val(new Date - 0);
function getAllDays() {
var s = new Date($('#hfEventStartDate').val() - 0);
var e = new Date($('#hfEventEndDate').val() - 0);
var a = [];
while(s < e) {
a.push(s);
s = new Date(s.setDate(
s.getDate() + 1
))
}
return a;
};
alert(getAllDays().join("'n"));
试试吧:jsFiddle
var date1 = new Date();
var date2 = new Date(2010, 0, 1);
var day;
var between = [date1];
while(date2 <= date1) {
day = date1.getDate()
date1 = new Date(date1.setDate(--day));
between.push(date1);
}
console.log(between);
start = new Date("August 13,2011");
future = new Date("October 13, 2011");
range = []
mil = 86400000 //24h
for (var i=start.getTime(); i<future.getTime();i=i+mil) {
range.push(new Date(i))
//or for timestamp
//range.push(i)
}
try moment .js and twix
var itr = moment.twix(new Date('2012-01-15'),new Date('2012-01-20')).iterate("days");
var range=[];
while(itr.hasNext()){
range.push(itr.next().toDate())
}
console.log(range);
生活:http://jsfiddle.net/aswani/GNPQc/
我已经阅读了给出的答案,这是我得出的结论。注意,我是从@pimvdb
的答案开始的// return an array composed of a list of the days' number
// from 1 month ago until today, not included
function getAllDays() {
var e = moment();
var s = moment().subtract('months', 1);
var a = []
// While the updated start date is older, perform the loop.
while(s.isBefore(e)) {
// Update the format according to moment js documentations format().
a.push(s.format("MMM - DD"));
s = s.add('days', 1);
}
return a;
}
只需在代码的任何地方调用该函数:
getAllDays();
参见:MomentJs library
这对我来说也很有效:
$("#hfEventStartDate").val(new Date - 24 * 3600 * 1000 * 7 - 1);
$("#hfEventEndDate").val(new Date - 0);
function getAllDays() {
var s = new Date($('#hfEventStartDate').val() - 0);
var e = new Date($('#hfEventEndDate').val() - 0);
var a = [];
while(s <= e) {
a.push(new Date(s));
s.setDate(s.getDate() + 1);
}
return a;
};
alert(getAllDays().join("'n"));
与pimvdb发布的代码相同,但做了一些小的修改,但它给出了不同的结果。我花了4个小时试图理解为什么,这就是我认为发生在pimvdb代码:
1 loop
a[0] = S1 = $("#hfEventStartDate").val(new Date - 24 * 3600 * 1000 * 7 - 1);
//2013-09-01
2 loop
a[0] = s1.setDate(s1.getDate() + 1); // 2013-09-02
a[1] = s2 = new Date(s1.setDate(s1.getDate() + 1)) // 2013-09-02
3 loop
a[0] = s1; // 2013-09-02
a[1] = s2.setDate(s2.getDate() + 1); // 2013-09-03
a[2] = s3 = new Date(s2.setDate(s2.getDate() + 1)) // 2013-09-03
and so on...
我不确定这是否是pimvdb故意的,但他的代码遗漏了起始日期,在我的示例中是2013-09-01。但即使是有意的,为什么不把最后一天也省略掉呢?至少当(s <)E)似乎是打算的,但是最后一天包含在最后一个数组中。
我很抱歉我可能是错的,我从来没有使用过面向对象编程,但是试图理解为什么[0]在第一个循环中被分配后在第二个循环中被更改,这让我完全疯了。希望我没说错。谢谢你。
您也可以使用间隔来做您想做的事情。
var tstamp = 0;
function timer() {
console.log(tstamp);
tstamp = new Date().getTime()
}
var i = setInterval(timer, 1000);
//when no more needed
clearInterval(i)
相关文章:
- 希望日期开始结束于while循环中的一个房间id的一个数组
- 如何获得一个只有时间的moment.js日期对象
- 如何将日期id从一个jsp传递到另一个jsp页面
- 算法:从数组(javascript/angular)中按当前日期获取上一个和下一个事件
- 创建一个倒计时计时器脚本,该脚本计算声音文件的持续时间,而不是特定的日期
- 通过将6个月添加到今天来获得最后一个月的日期's日期
- 以datetime本地格式一个接一个地显示日期
- 引导程序日期时间选择器来自另一个日期时间选择器
- Javascript是一个很好的日期选择器和时间选择器库
- 为什么在JavaScript中可以从另一个日期对象中减去日期对象
- 从上一个日期创建日期并添加到该日期
- 从另一个日期选择器中选择另一个值后,获取日期选择器的起始值
- 在jsp中,隐藏一个基于其他具有日期选择器的字段的字段
- 日期时间格式增加了一个小时
- Onsen UI在点击时显示一个日期选择器
- 几个jQuery日期选择器小部件,只向其中一个添加类
- 如何在一个代码中检查无效的日期格式和超过18年的有效期
- 如何在 JS 中比较两个日期?一个是用户选择的,一个是当前日期
- Javascript Date()给出错误的日期一个小时
- 比较2个日期一个是jquery对象,另一个是文本框