Time Units Solidity
Tự học Solidity bài 29: Time Units. Đơn vị thời gian trong Solidity
Summary for English Visiter
The variable now will return the number of seconds that have passed since January 1st 1970. Solidity also contains the time units seconds, minutes, hours, days, weeks and years.
uint lastUpdated; function updateTimestamp() public { lastUpdated = now; } // called, `false` if 5 minutes have not passed function fiveMinutesHavePassed() public view returns (bool) { return (now >= (lastUpdated + 5 minutes)); }
Thank you!
Đặt vấn đề
Nếu bạn chơi các trò chơi điện tử thì không còn lạ gì với khái niệm thời gian hồi chiêu, thời gian hồi phục năng lượng để tung ra chiêu thức tiếp theo. Đương nhiên trong trò chơi Zombie mà chúng ta đang xây dựng qua các bài học cũng vậy, các con Zombie không thể cắn liên tục liên tục được, giữa mỗi lần cắn thì phải có một khoảng thời gian hồi chiêu tiêu hoá thức ăn phải không nào. Đặt vấn đề cho bài toán là như vậy thì chúng ta sẽ giải quyết thế nào? Để làm được việc đấy chúng ta cần sử dụng các mốc thời gian đánh dấu, và tất nhiên trong SOLIDITY cũng hỗ trợ các đơn vị về thời gian như vậy. Chúng ta cùng tìm hiểu nhé.
Time units
Solidity cung cấp một số đơn vị gốc để làm việc và tính toán với thời gian.
Biến now sẽ trả về dấu thời gian unix hiện tại (số giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970)
Lưu ý: Thời gian Unix theo truyền thống được lưu trữ dưới dạng số 32 bit. Điều này sẽ dẫn đến vấn đề "Năm 2038", khi dấu thời gian 32-bit unix sẽ tràn và phá vỡ rất nhiều hệ thống kế thừa. Vì vậy, nếu chúng ta muốn DApp của mình tiếp tục hoạt động hơn 20 năm kể từ bây giờ, chúng tôi có thể sử dụng số 64-bit thay thế - nhưng người dùng của chúng tôi sẽ phải tiêu tốn nhiều GAS hơn để sử dụng DApp của chúng ta trong thời gian từ giờ đến năm 2038 :) Vậy phải làm sao nhỉ, đúng là một quyết định khó đấy.
Solidity cũng chứa các đơn vị thời gian: seconds, minutes, hours, days, weeks and years. Chúng sẽ chuyển đổi thành số giây. Vậy 1 minutes là 60, 1 hours là 3600 (60 giây x 60 phút), 1 days là 86400 (24 giờ x 60 phút x 60 giây), v.v.
Dưới đây là một ví dụ về cách các đơn vị thời gian này có thể hữu ích:
// Set `lastUpdated` to `now`
function updateTimestamp() public {
lastUpdated = now;
}
// Will return `true` if 5 minutes have passed since `updateTimestamp` was
// called, `false` if 5 minutes have not passed
function fiveMinutesHavePassed() public view returns (bool) {
return (now >= (lastUpdated + 5 minutes));
}