You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Solidity中无法将整数变量与时间变量结合的问题求助

Solidity时间计算错误解决方案:变量与时间单位结合问题

错误原因

你遇到的ParserError是因为Solidity的时间单位后缀(如days、hours)仅支持和字面量整数搭配使用,不能直接跟变量(比如你的daystohold1)拼接。编译器无法识别daystohold1 days这种写法,因此抛出语法错误。

解决方案

有两种标准写法可以实现需求:

方法1:硬编码一天的秒数(86400)

直接将天数变量乘以一天的总秒数(1天=24×60×60=86400秒),再与block.timestamp相加:

endHold = block.timestamp + daystohold1 * 86400;

方法2:用Solidity内置时间单位转秒数(更可读)

利用Solidity对字面量的时间单位支持,先获取1天对应的秒数,再乘以变量,避免硬编码数字:

endHold = block.timestamp + daystohold1 * uint256(1 days);

注:这里需要把1 days转成uint256类型,确保和daystohold1(uint256)的类型匹配,避免隐式转换问题。

修正后的完整代码片段

function setFormula(uint256 fromPrice1, uint256 toPrice1, uint256 daystohold1,
    uint256 fromPrice2, uint256 toPrice2, uint256 daystohold2,
    uint256 fromPrice3, uint256 toPrice3, uint256 daystohold3,
    uint256 elsedaystohold4) public onlyOwner {

    if(getLastPrice <= fromPrice1 && getLastPrice <= toPrice1){
        onHold = true;
        // 替换为以下任意一种正确写法
        endHold = block.timestamp + daystohold1 * uint256(1 days);
        // 或者 endHold = block.timestamp + daystohold1 * 86400;
    }
}

内容的提问来源于stack exchange,提问作者Masood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 09:01:06