【问题标题】:Javascript for loop behaviour outputting the same result each iteration循环行为的 Javascript 每次迭代输出相同的结果
【发布时间】:2013-10-10 20:25:37
【问题描述】:

我承认我有点 JS 新手,并且来自 PHP 背景,我对范围的想法显然与 Javascript 不同。

// There's a date set, so begin processing
var original_date       = new Date($('input#tour_encoded_dates').val());
var date_search_string  = ''; 
var day_limit           = 14;
var timestamp           = '';

// Go forwards day_limit days
for(var i = 0; i < day_limit; i++) {
    timestamp = strtotime('+'+i+' days', original_date);
    calculated_date = new Date(timestamp).format('Y-m-d');
    date_search_string += calculated_date + ' ';
}

console.log(date_search_string);

console.log() 的输出是:

2013-10-10 2013-10-10 2013-10-10 2013-10-10 2013-10-10 2013-10-10 2013-10-10 2013-10-10 2013-10-10 2013-10-10 2013-10-10 2013-10-10 2013-10-10 2013-10-10

我原以为每次迭代都会将日期增加一天,但它们保持不变。

作为参考,如果我将循环的最后一行更改为date_search_string += timestamp + ' ';,输出如下:

1381363200000 1381363286400 1381363372800 1381363459200 1381363545600 1381363632000 1381363718400 1381363804800 1381363891200 1381363977600 1381364064000 1381364150400 1381364236800 1381364323200

所以问题显然出在 calculated_date 变量上 - 对吧?

有人可以解释执行此操作的正确方法吗?谢谢。

【问题讨论】:

  • JS strtotime函数的代码是什么?
  • 什么是day_limit?那是一个数字吗?如果它是一个数组,您需要使用day_limit.length 来获取其中的内容数量。 original_dateday_limit 内吗?
  • @IlyaBursov 为了清晰起见,我更新了代码。
  • 我刚刚检查了你的时间戳:jsfiddle.net/JrVQL - 2013-10-10 是正确的结果...
  • 请给我们strtotime代码,问题99%在里面

标签: javascript loops for-loop scope


【解决方案1】:

每个时间戳之间有 86400(即 1/1000 天)。

您正在计算(在strtotime 中),好像时间戳是秒但它们是毫秒。

【讨论】:

  • 就是这样,OP正在使用strtotime from php.js library,它期望时间戳以秒为单位,并将其乘以1000,计算,然后除以1000,然后返回。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多