gpt4 book ai didi

javascript - 无法添加两个日期值 Angular js

转载 作者:行者123 更新时间:2023-12-03 03:26:49 25 4
gpt4 key购买 nike

我已经实现了一个 magnifyChart 函数,我需要在其中添加两个时间值。但是当我这样做时,它会将其视为字符串并将其连接起来。尽管当我对这两个值执行减法时,它给出了正确的结果。添加两个日期值如何获得正确的结果?

function magnifyChart (timeA, timeB) {
var newTimeA;
var newTimeB;
var quarterSize = Math.floor((timeB - timeA) / 4);
logger.info("timeA", timeA); //Fri Sep 08 2017 17:45:19 GMT-0400 (EDT)
logger.info("timeB", timeB); //Sun Oct 01 2017 16:01:51 GMT-0400 (EDT)
logger.info("quarterSize", quarterSize); //495248155
newTimeA = Math.floor(parseInt(timeA) + parseInt(quarterSize));
newTimeB = Math.floor(timeB - quarterSize);
logger.info("newTimeA", newTimeA);
logger.info("newTimeB", newTimeB);//1506392863689
return [timeA + quarterSize, timeB - quarterSize];
}

最佳答案

如果timeAtimeB是Date对象,则在:

newTimeA = Math.floor(parseInt(timeA) + parseInt(quarterSize));

表达式 parseInt(timeA) 将首先将 timeA 强制转换为字符串,然后尝试将其解析为数字,这可能会返回数字或 NaN.

要解决这个问题,最简单的方法是使用 unary + operator :

newTimeA = +timeA + quarterSize;

不需要Math.floor,因为两个值都已经是整数,并且将它们相加必须产生另一个整数。

表达式+timeA将返回其时间值,该值被指定为整数(或NaN,但Math.floor不会解决这个问题)并且< em>quarterSize 必须是来自 Math.floor 的整数:

var quarterSize = Math.floor((timeB - timeA) / 4);

当您减去两个日期时,- 运算符会强制将两者都先编号,因此 timeB - timeA 无需任何特殊处理即可“工作”。

您生成了 newTimeAnewTimeB 但不将它们用于任何用途,因此我认为它们仅用于调试。

所以你的代码减少为:

function magnifyChart (timeA, timeB) {
var quarterSize = Math.floor((timeB - timeA) / 4);
return [+timeA + quarterSize, +timeB - quarterSize];
}

如果您想返回日期而不是时间值,请执行以下操作:

    return [new Date(+timeA + quarterSize),
new Date(+timeB - quarterSize)];

注意+timeB -quarterSize 的情况下,不需要一元 +,因为减法无论如何都会将日期强制为数字,但是保留代码对于维护可能很有用一致。

关于javascript - 无法添加两个日期值 Angular js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46285710/

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