Solidityで現在日時を取得する方法について解説します。
構文
Solidityで現在日時を取得するには、block.timestampを使用します。
なお、現在日時は、UNIXタイムスタンプで返されます。
block.timestamp
時間単位も用意されており、それぞれ、以下のようになります。
サフィックス | 単位 | 秒数 |
---|---|---|
weeks | 週 | 60 * 60 * 24 * 7 |
days | 日 | 60 * 60 * 24 |
hours | 時 | 60 * 60 |
minutes | 分 | 60 |
seconds | 秒 | 1 |
サフィックスですが、こちらのように、“数字 + サフィックス”という形で記述します。
もちろん、足し算など四則演算することも可能です。
n weeks; n days; n hours; n minutes; n seconds;
サンプルコード
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract Test {
function getCurrentTimestamp() public view returns(uint) {
// 現在日時を取得(タイムスタンプ)
return block.timestamp;
}
function getTotalTime() public pure returns(uint) {
// 各時間単位を加算(秒)
return 1 weeks + 1 days + 1 hours + 1 minutes + 1 seconds;
}
function hasExpired(uint timestamp) public view returns(bool) {
// 1日が経過したかどうか
return block.timestamp > timestamp + 1 days;
}
}
以前よく使われていたnow関数は廃止になり今は使えませんのでご注意ください。