aboutsummaryrefslogtreecommitdiff
path: root/v_windows/v/vlib/time/format.v
diff options
context:
space:
mode:
Diffstat (limited to 'v_windows/v/vlib/time/format.v')
-rw-r--r--v_windows/v/vlib/time/format.v174
1 files changed, 174 insertions, 0 deletions
diff --git a/v_windows/v/vlib/time/format.v b/v_windows/v/vlib/time/format.v
new file mode 100644
index 0000000..6a77bb3
--- /dev/null
+++ b/v_windows/v/vlib/time/format.v
@@ -0,0 +1,174 @@
+// Copyright (c) 2019-2021 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)
+}
+
+// format_ss_milli returns a date string in "YYYY-MM-DD HH:MM:SS.123" format (24h).
+pub fn (t Time) format_ss_milli() string {
+ return t.get_fmt_str(.hyphen, .hhmmss24_milli, .yyyymmdd)
+}
+
+// format_ss_micro returns a date string in "YYYY-MM-DD HH:MM:SS.123456" format (24h).
+pub fn (t Time) format_ss_micro() string {
+ return t.get_fmt_str(.hyphen, .hhmmss24_micro, .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 {
+ znow := now()
+ // Today
+ if t.month == znow.month && t.year == znow.year && t.day == znow.day {
+ return t.get_fmt_time_str(.hhmm24)
+ }
+ // This year
+ if t.year == znow.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 {
+ znow := now()
+ // Today
+ if t.month == znow.month && t.year == znow.year && t.day == znow.day {
+ return t.get_fmt_time_str(.hhmm12)
+ }
+ // This year
+ if t.year == znow.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}' }
+ .hhmmss24_milli { '${t.hour:02d}:${t.minute:02d}:${t.second:02d}.${(t.microsecond / 1000):03d}' }
+ .hhmmss24_micro { '${t.hour:02d}:${t.minute:02d}:${t.second:02d}.${t.microsecond:06d}' }
+ 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 % 100):02d}'
+ mut res := match fmt_date {
+ .ddmmyy { '${t.day:02d}|${t.month:02d}|$year' }
+ .ddmmyyyy { '${t.day:02d}|${t.month:02d}|${t.year:04d}' }
+ .mmddyy { '${t.month:02d}|${t.day:02d}|$year' }
+ .mmddyyyy { '${t.month:02d}|${t.day:02d}|${t.year:04d}' }
+ .mmmd { '$month|$t.day' }
+ .mmmdd { '$month|${t.day:02d}' }
+ .mmmddyy { '$month|${t.day:02d}|$year' }
+ .mmmddyyyy { '$month|${t.day:02d}|${t.year:04d}' }
+ .yyyymmdd { '${t.year:04d}|${t.month:02d}|${t.day:02d}' }
+ .yymmdd { '$year|${t.month:02d}|${t.day:02d}' }
+ else { 'unknown enumeration $fmt_date' }
+ }
+ del := match fmt_dlmtr {
+ .dot { '.' }
+ .hyphen { '-' }
+ .slash { '/' }
+ .space { ' ' }
+ .no_delimiter { '' }
+ }
+ res = res.replace('|', del)
+ 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 {
+ dstr := t.get_fmt_date_str(fmt_dlmtr, fmt_date)
+ tstr := t.get_fmt_time_str(fmt_time)
+ return '$dstr $tstr'
+ } else {
+ return t.get_fmt_date_str(fmt_dlmtr, fmt_date)
+ }
+ }
+}
+
+// This is just a TEMPORARY function for cookies and their expire dates
+pub fn (t Time) utc_string() string {
+ day_str := t.weekday_str()
+ month_str := t.smonth()
+ utc_string := '$day_str, $t.day $month_str $t.year ${t.hour:02d}:${t.minute:02d}:${t.second:02d} UTC'
+ return utc_string
+}