如何获取以 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;
}
}
我需要将 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;
}
}