gpt4 book ai didi

javascript - 保存到变量时循环获取上一个数字

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:58:18 25 4
gpt4 key购买 nike

对于学习 JavaScript 还是个新手。我想遍历一些值。如果 value 大于或等于某个数字,则中断循环并获取前一个数字。例如:

var time = [14, 35];
var interval = 40; // in minutes
var startTime = [10, 40];

var timeFormatted = '2019-02-04 '+time[0]+':'+time[1];
var startTimeFormatted = '2019-02-04 '+startTime[0]+':'+startTime[1];

var dtTime = new Date(timeFormatted);
var dtStartTime = new Date(startTimeFormatted);

var currentTime = dtStartTime;
for(i = 0; i < 20; i++) {
var previouslySelectedTime = currentTime;
currentTime.setMinutes(currentTime.getMinutes() + interval);
currentTime = new Date(currentTime);
if(currentTime >= dtTime) {
break;
}
}

alert(previouslySelectedTime);

beforeTime 的最终时间结果应该是 14:00:00 但它显示的是 14:40:00。有什么问题吗?

最佳答案

如果您查看 currentTime,它引用的是 Date目的。所以,当你执行下一段代码时:

var previouslySelectedTime = currentTime;

变量 previouslySelectedTime 将引用 currentTime 引用的同一对象。然后你执行:

currentTime.setMinutes(currentTime.getMinutes() + interval);

这将更改 currentTimepreviouslySelectedTime 引用的对象。解决此问题的简单方法是从 currentTime 创建一个新的 Date,然后再将其分配给上述变量:

var previouslySelectedTime = new Date(currentTime);

此外,在解决这个问题之后,就不需要下一行了:

currentTime = new Date(currentTime);

示例

var time = [14, 35];
var interval = 40; // in minutes
var startTime = [10, 40];

var timeFormatted = '2019-02-04 ' + time[0] + ':' + time[1];
var startTimeFormatted = '2019-02-04 ' + startTime[0] + ':' + startTime[1];

var dtTime = new Date(timeFormatted);
var currentTime = new Date(startTimeFormatted);
var previouslySelectedTime;

for (let i = 0; i < 20; i++)
{
previouslySelectedTime = new Date(currentTime);
currentTime.setMinutes(currentTime.getMinutes() + interval);

if (currentTime >= dtTime)
break;
}

alert(previouslySelectedTime);

简化版:

更重要的是,如果您使用 Date() 对象提供的方法和一个 while 循环,您可以在您的代码中做一些简化。

var time = [14, 35];
var interval = 40; // in minutes
var startTime = [10, 40];

var dtTime = new Date();
dtTime.setHours(time[0], time[1], 0);
var currentTime = new Date();
currentTime.setHours(startTime[0], startTime[1], 0);
var previouslySelectedTime;

while (currentTime < dtTime)
{
previouslySelectedTime = new Date(currentTime);
currentTime.setMinutes(currentTime.getMinutes() + interval);
}

alert(previouslySelectedTime);

关于javascript - 保存到变量时循环获取上一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55789200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com