gdbasics/scripts/libs/format.gd

81 lines
3.1 KiB
GDScript

###
### various formatting functions
###
extends Object
class_name GDBFormat
################
# public stuff #
################
func _init():
assert(0, "This class should not be instantiated.")
static func format_bytes(bytes : int) -> String:
var UNITS = ["B", "KiB", "MiB", "GiB", "TiB"]
var idx = 0
while bytes > 1024 && idx < UNITS.size() - 1:
bytes = bytes / 1024.0
idx += 1
return "%.4f %s" % [bytes, UNITS[idx]]
static func format_time(time : float) -> String:
# warning-ignore:integer_division
var minutes = int(time) / 60
var seconds = int(time) % 60
return "%02d:%02d" % [minutes, seconds]
static func format_unixtime(unix_time : int, format := GDBUtility.translate("{0year}-{0month}-{0day} {0hour}:{0minute}")) -> String:
var datetime = OS.get_datetime_from_unix_time(unix_time)
datetime["year2"] = datetime["year"] % 100
datetime["0year"] = "%02d" % datetime["year2"]
datetime["0month"] = "%02d" % datetime["month"]
datetime["0day"] = "%02d" % datetime["day"]
datetime["0hour"] = "%02d" % datetime["hour"]
datetime["0minute"] = "%02d" % datetime["minute"]
datetime["0second"] = "%02d" % datetime["second"]
# return "%02d-%02d-%02d %02d:%02d" % [datetime["year"] % 100, datetime["month"], datetime["day"], datetime["hour"], datetime["minute"]]
return format.format(datetime)
static func smart_format_unixtime(unix_time : int, format_date := GDBUtility.translate("{0year}-{0month}-{0day}"), format_time := GDBUtility.translate("{0hour}:{0minute}")) -> String:
var now = OS.get_unix_time()
var datetime = OS.get_datetime_from_unix_time(unix_time)
__datetime_add_fields(datetime)
if now == unix_time:
return GDBUtility.translate("just now")
elif now > unix_time:
var tdiff = now - unix_time
if tdiff < 60: # < 60 seconds
return GDBUtility.translate("%d seconds ago") % tdiff
elif tdiff < 3600: # < 60 minutes
return GDBUtility.translate("%d minutes ago") % (tdiff / 60)
var now_datetime = OS.get_datetime_from_unix_time(now)
if now_datetime["year"] == datetime["year"] && now_datetime["month"] == datetime["month"] && now_datetime["day"] == datetime["day"]:
return GDBUtility.translate("today at %s") % format_time.format(datetime)
else:
var tdiff = unix_time - now
if tdiff < 60:
return GDBUtility.translate("in %d seconds") % tdiff
elif tdiff < 3600:
return GDBUtility.translate("in %d minutes") % (tdiff / 60)
var now_datetime = OS.get_datetime_from_unix_time(now)
if now_datetime["year"] == datetime["year"] && now_datetime["month"] == datetime["month"] && now_datetime["day"] == datetime["day"]:
return GDBUtility.translate("today at %s") % format_time.format(datetime)
return "%s %s" % [format_date.format(datetime), format_time.format(datetime)]
#################
# private stuff #
#################
static func __datetime_add_fields(datetime : Dictionary) -> void:
datetime["year2"] = datetime["year"] % 100
datetime["0year"] = "%02d" % datetime["year2"]
datetime["0month"] = "%02d" % datetime["month"]
datetime["0day"] = "%02d" % datetime["day"]
datetime["0hour"] = "%02d" % datetime["hour"]
datetime["0minute"] = "%02d" % datetime["minute"]
datetime["0second"] = "%02d" % datetime["second"]