如何获取以 Unix 时间戳表示的月份的第一天

How to get the first day of the month expressed in Unix timestamp

我需要将 block.timestamp 与该月第一天的 UNIX 时间戳进行比较。知道如何在 Solidity 中做到这一点吗?

您可以使用 this one 等外部库来完成大部分工作。但这会影响字节码的整体大小,并且与仅计算日期而不计算其他任何操作相比,某些操作会花费更多的 gas。

或者您可以手动计算日期。这是更复杂的方法,但部署和 运行 成本会更便宜。最后,unix 时间戳只是从 1970 年 1 月 1 日开始的秒数,因此您可以计算时间 0 和今天之间的秒数/天数/月数(不要忘记考虑闰年) .

使用链接库的例子:

pragma solidity ^0.6.0;

import 'https://github.com/bokkypoobah/BokkyPooBahsDateTimeLibrary/blob/master/contracts/BokkyPooBahsDateTimeLibrary.sol';

contract Test {
    function isTodayFirstDayOfMonth() external returns (bool) {
        /*
         * Today is May 12, so `getDay()` returns 12.
         */
        uint256 today = BokkyPooBahsDateTimeLibrary.getDay(block.timestamp);

        return today == 1;
    }
}