summaryrefslogtreecommitdiff
path: root/services/TimeDate.qml
blob: f066f46414c471c1475f67a418b2ada8b0fe6f2e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
pragma Singleton

import Quickshell
import QtQuick

Singleton {
    id: root
    readonly property string time: {
        // fuck you qt give me my 12 hr time
        var h = clock.date.getHours();
        var m = clock.date.getMinutes();
        var s = clock.date.getSeconds();
        h = h % 12;
        if (h === 0)
            h = 12;
        return (h < 10 ? "0" : "") + h + ":" + (m < 10 ? "0" : "") + m + ":" + (s < 10 ? "0" : "") + s;
    }
    readonly property int hours: {
        var h = clock.date.getHours();
        h = h % 12;
        if (h === 0)
            h = 12;
        return h;
    }
    readonly property int minutes: clock.date.getMinutes()
    readonly property int seconds: clock.date.getSeconds()

    readonly property string date: Qt.formatDateTime(clock.date, "dddd dd/MM")

    function sinceWhen(d) {
        if (typeof d === "string")
            return;

        var now = clock.date;

        function startOfDay(x) {
            return new Date(x.getFullYear(), x.getMonth(), x.getDate(), 0, 0, 0, 0);
        }

        function startOfWeek(x) {
            var dow = x.getDay();
            var mondayOffset = (dow + 6) % 7;
            var sod = startOfDay(x);
            sod.setDate(sod.getDate() - mondayOffset);
            return sod;
        }

        function fmt12h(dateObj) {
            var h24 = dateObj.getHours();
            var m = dateObj.getMinutes();
            var h12 = h24 % 12;
            if (h12 === 0)
                h12 = 12;
            var ampm = h24 < 12 ? "AM" : "PM";
            return ((h12 < 10 ? "0" : "") + h12 + ":" + (m < 10 ? "0" : "") + m + " " + ampm);
        }

        function weekdayName(dateObj) {
            return Qt.formatDateTime(dateObj, "dddd");
        }

        var nowSOD = startOfDay(now).getTime();
        var dSOD = startOfDay(d).getTime();
        if (nowSOD === dSOD) {
            return fmt12h(d);
        }

        var nowSOW = startOfWeek(now).getTime();
        var dSOW = startOfWeek(d).getTime();
        if (nowSOW === dSOW) {
            return weekdayName(d) + " " + fmt12h(d);
        }

        var ymd = Qt.formatDateTime(d, "yyyy-MM-dd");
        return ymd + " at " + fmt12h(d);
    }

    SystemClock {
        id: clock
        precision: SystemClock.Seconds
    }
}