180 lines
4.5 KiB
V
180 lines
4.5 KiB
V
// Copyright (c) 2019-2020 Alexander Medvednikov. All rights reserved.
|
|
// Use of this source code is governed by an MIT license
|
|
// that can be found in the LICENSE file.
|
|
module time
|
|
|
|
// format returns a date string in "YYYY-MM-DD HH:MM" format (24h).
|
|
pub fn (t Time) format() string {
|
|
return t.get_fmt_str(.hyphen, .hhmm24, .yyyymmdd)
|
|
}
|
|
|
|
// format_ss returns a date string in "YYYY-MM-DD HH:MM:SS" format (24h).
|
|
pub fn (t Time) format_ss() string {
|
|
return t.get_fmt_str(.hyphen, .hhmmss24, .yyyymmdd)
|
|
}
|
|
|
|
// hhmm returns a date string in "HH:MM" format (24h).
|
|
pub fn (t Time) hhmm() string {
|
|
return t.get_fmt_time_str(.hhmm24)
|
|
}
|
|
|
|
// hhmmss returns a date string in "HH:MM:SS" format (24h).
|
|
pub fn (t Time) hhmmss() string {
|
|
return t.get_fmt_time_str(.hhmmss24)
|
|
}
|
|
|
|
// hhmm12 returns a date string in "HH:MM" format (12h).
|
|
pub fn (t Time) hhmm12() string {
|
|
return t.get_fmt_time_str(.hhmm12)
|
|
}
|
|
|
|
// ymmdd returns a date string in "YYYY-MM-DD" format.
|
|
pub fn (t Time) ymmdd() string {
|
|
return t.get_fmt_date_str(.hyphen, .yyyymmdd)
|
|
}
|
|
|
|
// ddmmy returns a date string in "DD.MM.YYYY" format.
|
|
pub fn (t Time) ddmmy() string {
|
|
return t.get_fmt_date_str(.dot, .ddmmyyyy)
|
|
}
|
|
|
|
// md returns a date string in "MMM D" format.
|
|
pub fn (t Time) md() string {
|
|
return t.get_fmt_date_str(.space, .mmmd)
|
|
}
|
|
|
|
// clean returns a date string in a following format:
|
|
// - a date string in "HH:MM" format (24h) for current day
|
|
// - a date string in "MMM D HH:MM" format (24h) for date of current year
|
|
// - a date string formatted with format function for other dates
|
|
pub fn (t Time) clean() string {
|
|
now := time.now()
|
|
// Today
|
|
if t.month == now.month && t.year == now.year && t.day == now.day {
|
|
return t.get_fmt_time_str(.hhmm24)
|
|
}
|
|
// This year
|
|
if t.year == now.year {
|
|
return t.get_fmt_str(.space, .hhmm24, .mmmd)
|
|
}
|
|
return t.format()
|
|
}
|
|
|
|
// clean12 returns a date string in a following format:
|
|
// - a date string in "HH:MM" format (12h) for current day
|
|
// - a date string in "MMM D HH:MM" format (12h) for date of current year
|
|
// - a date string formatted with format function for other dates
|
|
pub fn (t Time) clean12() string {
|
|
now := time.now()
|
|
// Today
|
|
if t.month == now.month && t.year == now.year && t.day == now.day {
|
|
return t.get_fmt_time_str(.hhmm12)
|
|
}
|
|
// This year
|
|
if t.year == now.year {
|
|
return t.get_fmt_str(.space, .hhmm12, .mmmd)
|
|
}
|
|
return t.format()
|
|
}
|
|
|
|
// get_fmt_time_str returns a date string with specified FormatTime type.
|
|
pub fn (t Time) get_fmt_time_str(fmt_time FormatTime) string {
|
|
if fmt_time == .no_time {
|
|
return ''
|
|
}
|
|
tp := if t.hour > 11 { 'p.m.' } else { 'a.m.' }
|
|
hour := if t.hour > 12 { t.hour - 12 } else if t.hour == 0 { 12 } else { t.hour }
|
|
return match fmt_time {
|
|
.hhmm12{
|
|
'$hour:${t.minute:02d} $tp'
|
|
}
|
|
.hhmm24{
|
|
'${t.hour:02d}:${t.minute:02d}'
|
|
}
|
|
.hhmmss12{
|
|
'$hour:${t.minute:02d}:${t.second:02d} $tp'
|
|
}
|
|
.hhmmss24{
|
|
'${t.hour:02d}:${t.minute:02d}:${t.second:02d}'
|
|
}
|
|
else {
|
|
'unknown enumeration $fmt_time'}
|
|
}
|
|
}
|
|
|
|
// get_fmt_time_str returns a date string with specified
|
|
// FormatDelimiter and FormatDate type.
|
|
pub fn (t Time) get_fmt_date_str(fmt_dlmtr FormatDelimiter, fmt_date FormatDate) string {
|
|
if fmt_date == .no_date {
|
|
return ''
|
|
}
|
|
month := '${t.smonth()}'
|
|
year := t.year.str()[2..]
|
|
mut res := match fmt_date {
|
|
.ddmmyy{
|
|
'${t.day:02d}|${t.month:02d}|$year'
|
|
}
|
|
.ddmmyyyy{
|
|
'${t.day:02d}|${t.month:02d}|${t.year}'
|
|
}
|
|
.mmddyy{
|
|
'${t.month:02d}|${t.day:02d}|$year'
|
|
}
|
|
.mmddyyyy{
|
|
'${t.month:02d}|${t.day:02d}|${t.year}'
|
|
}
|
|
.mmmd{
|
|
'$month|${t.day}'
|
|
}
|
|
.mmmdd{
|
|
'$month|${t.day:02d}'
|
|
}
|
|
.mmmddyyyy{
|
|
'$month|${t.day:02d}|${t.year}'
|
|
}
|
|
.yyyymmdd{
|
|
'${t.year}|${t.month:02d}|${t.day:02d}'
|
|
}
|
|
else {
|
|
'unknown enumeration $fmt_date'}}
|
|
res = res.replace('|', match fmt_dlmtr {
|
|
.dot{
|
|
'.'
|
|
}
|
|
.hyphen{
|
|
'-'
|
|
}
|
|
.slash{
|
|
'/'
|
|
}
|
|
.space{
|
|
' '
|
|
}
|
|
else {
|
|
'unknown enumeration $fmt_dlmtr'}})
|
|
return res
|
|
}
|
|
|
|
// get_fmt_str returns a date string with specified FormatDelimiter,
|
|
// FormatTime type, and FormatDate type.
|
|
pub fn (t Time) get_fmt_str(fmt_dlmtr FormatDelimiter, fmt_time FormatTime, fmt_date FormatDate) string {
|
|
if fmt_date == .no_date {
|
|
if fmt_time == .no_time {
|
|
// saving one function call although it's checked in
|
|
// t.get_fmt_time_str(fmt_time) in the beginning
|
|
return ''
|
|
}
|
|
else {
|
|
return t.get_fmt_time_str(fmt_time)
|
|
}
|
|
}
|
|
else {
|
|
if fmt_time != .no_time {
|
|
return t.get_fmt_date_str(fmt_dlmtr, fmt_date) + ' ' + t.get_fmt_time_str(fmt_time)
|
|
}
|
|
else {
|
|
return t.get_fmt_date_str(fmt_dlmtr, fmt_date)
|
|
}
|
|
}
|
|
}
|