Merge pull request #939 from Neveix/feat-precise-utc-time-function

add precise_utc_time function
This commit is contained in:
MihailRis 2026-08-19 19:33:19 +03:00 • committed by GitHub
commit 29849dab63
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 23 additions and 8 deletions

View file

@ -10,6 +10,9 @@ time.delta() -> number
-- Returns UTC time in seconds -- Returns UTC time in seconds
time.utc_time() -> int time.utc_time() -> int
-- Returns UTC time in seconds with millisecond precision
time.precise_utc_time() -> number
-- Returns local (system) time in seconds -- Returns local (system) time in seconds
time.local_time() -> int time.local_time() -> int

View file

@ -1,15 +1,18 @@
# Библиотека *time* # Библиотека *time*
```lua ```lua
-- Возвращает время с момента запуска движка в секундах и милисекундах. -- Возвращает время с момента запуска движка в секундах и миллисекундах.
time.uptime() -> number time.uptime() -> number
-- Возвращает дельту времени в секундах и милисекундах (время прошедшее с предыдущего кадра) -- Возвращает дельту времени в секундах и миллисекундах (время прошедшее с предыдущего кадра)
time.delta() -> number time.delta() -> number
-- Возвращает время UTC в секундах -- Возвращает время UTC (секунды с 1970-01-01 UTC)
time.utc_time() -> int time.utc_time() -> int
-- Возвращает время UTC (секунды с 1970-01-01 UTC) с точностью до миллисекунд
time.precise_utc_time() -> number
-- Возвращает локальное (системное) время в секундах -- Возвращает локальное (системное) время в секундах
time.local_time() -> int time.local_time() -> int

View file

@ -1,5 +1,6 @@
#include "engine/Engine.hpp"
#include "api_lua.hpp" #include "api_lua.hpp"
#include "engine/Engine.hpp"
#include <ctime> #include <ctime>
using namespace scripting; using namespace scripting;
@ -20,11 +21,18 @@ static int l_utc_time(lua::State* L) {
return lua::pushnumber(L, std::time(nullptr)); return lua::pushnumber(L, std::time(nullptr));
} }
static int l_precise_utc_time(lua::State* L) {
auto now = std::chrono::steady_clock::now();
return lua::pushnumber(
L, std::chrono::duration<double>(now.time_since_epoch()).count()
);
}
static int l_local_time(lua::State* L) { static int l_local_time(lua::State* L) {
std::time_t t = std::time(nullptr); std::time_t t = std::time(nullptr);
std::tm gmt_tm{}; std::tm gmt_tm {};
std::tm local_tm{}; std::tm local_tm {};
#if defined(USE_MSVC_TIME_SAFE) #if defined(USE_MSVC_TIME_SAFE)
gmtime_s(&gmt_tm, &t); gmtime_s(&gmt_tm, &t);
@ -44,8 +52,8 @@ static int l_local_time(lua::State* L) {
static int l_utc_offset(lua::State* L) { static int l_utc_offset(lua::State* L) {
std::time_t t = std::time(nullptr); std::time_t t = std::time(nullptr);
std::tm gmt_tm{}; std::tm gmt_tm {};
std::tm local_tm{}; std::tm local_tm {};
#if defined(USE_MSVC_TIME_SAFE) #if defined(USE_MSVC_TIME_SAFE)
gmtime_s(&gmt_tm, &t); gmtime_s(&gmt_tm, &t);
@ -74,6 +82,7 @@ const luaL_Reg timelib[] = {
{"uptime", lua::wrap<l_uptime>}, {"uptime", lua::wrap<l_uptime>},
{"delta", lua::wrap<l_delta>}, {"delta", lua::wrap<l_delta>},
{"utc_time", lua::wrap<l_utc_time>}, {"utc_time", lua::wrap<l_utc_time>},
{"precise_utc_time", lua::wrap<l_precise_utc_time>},
{"utc_offset", lua::wrap<l_utc_offset>}, {"utc_offset", lua::wrap<l_utc_offset>},
{"local_time", lua::wrap<l_local_time>}, {"local_time", lua::wrap<l_local_time>},
{"precise_time", lua::wrap<l_precise_time>}, {"precise_time", lua::wrap<l_precise_time>},