50 lines
1.8 KiB
GDScript
50 lines
1.8 KiB
GDScript
class_name Datetime extends RefCounted
|
|
|
|
const WEEKDAYS = {
|
|
"ru": ["вторник", "среда", "четверг", "пятница", "суббота", "воскресенье"],
|
|
"en": ["tuesday", "wednesday", "thursday", "friday", "saturday", "sunday"],
|
|
}
|
|
|
|
# var readable is unused and removed to avoid confusion
|
|
|
|
static func init_datetime() -> Dictionary:
|
|
const SEC_IN_YEAR := 31556925.9747
|
|
const RATIO := SEC_IN_YEAR/432/24/60/60
|
|
var now := int((1970 * SEC_IN_YEAR + Time.get_unix_time_from_system()) / RATIO - 1970 * SEC_IN_YEAR)
|
|
var adt = Time.get_datetime_dict_from_unix_time(now)
|
|
var dt: int = adt["second"] + 60 * adt["minute"] + 3600 * adt["hour"] + \
|
|
+ 86400 * adt["day"] + 3110400 * adt["month"] + 37324800 * adt["year"]
|
|
return _to_adventure_dict_dt(dt)
|
|
|
|
|
|
static func add_timedelta(dt, delta_in_min: int) -> int:
|
|
const TIME_DELTA_DEVIATION: float = 0.2
|
|
var delta_in_sec = delta_in_min * 60
|
|
var delta := int(TIME_DELTA_DEVIATION * delta_in_sec)
|
|
return dt + delta_in_sec + randi_range(-delta, delta)
|
|
|
|
|
|
static func _to_adventure_dict_dt(dt_from: int) -> Dictionary:
|
|
var dt := {}
|
|
dt["dt"] = dt_from
|
|
@warning_ignore("integer_division")
|
|
dt["year"] = dt_from / 37324800
|
|
dt_from %= 37324800
|
|
@warning_ignore("integer_division")
|
|
dt["month"] = dt_from / 3110400
|
|
dt_from %= 3110400
|
|
@warning_ignore("integer_division")
|
|
dt["day"] = dt_from / 86400
|
|
dt["weekday"] = dt["day"] % 6
|
|
|
|
# TODO replace with language from global settings
|
|
dt["weekdayname"] = WEEKDAYS["ru"][dt.weekday]
|
|
dt_from %= 86400
|
|
@warning_ignore("integer_division")
|
|
dt["hour"] = dt_from / 3600
|
|
dt_from %= 3600
|
|
@warning_ignore("integer_division")
|
|
dt["minute"] = dt_from / 60
|
|
dt["second"] = dt_from % 60
|
|
return dt
|