From 9eb19d701072d6ce4e9d99c9f1a3782630bc46e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Paul=20Arguill=C3=A8re?=
Date: Wed, 27 Mar 2024 19:06:04 +0100
Subject: [PATCH] handle AM/PM time in target menu, add
yesterday/today/tomorrow to improve readability
---
apps/elapsed_t/app.js | 121 +++++++++++++++++++++++++++---------------
1 file changed, 79 insertions(+), 42 deletions(-)
diff --git a/apps/elapsed_t/app.js b/apps/elapsed_t/app.js
index f799c4f4c..da006c144 100644
--- a/apps/elapsed_t/app.js
+++ b/apps/elapsed_t/app.js
@@ -112,6 +112,13 @@ function formatDateTime(date, dateFormat, time24, showSeconds) {
return formattedDateTime;
}
+function formatHourToAMPM(h){
+ var ampm = (h >= 12 ? 'PM' : 'AM');
+ var h_ampm = h % 12;
+ h_ampm = (h_ampm == 0 ? 12 : h_ampm);
+ return `${h_ampm} ${ampm}`
+}
+
function howManyDaysInMonth(month, year) {
return new Date(year, month, 0).getDate();
}
@@ -125,44 +132,6 @@ function handleExceedingDay() {
}
}
-function setTarget(set) {
- if (set) {
- target = new Date(
- data.target.Y,
- data.target.M - 1,
- data.target.D,
- data.target.h,
- data.target.m,
- data.target.s
- );
- data.target.isSet = true;
- } else {
- target = new Date();
- Object.assign(
- data,
- {
- target: {
- isSet: false,
- Y: now.getFullYear(),
- M: now.getMonth() + 1, // Month is zero-based, so add 1
- D: now.getDate(),
- h: now.getHours(),
- m: now.getMinutes(),
- s: now.getSeconds()
- }
- }
- );
- }
-
- writeData();
-}
-
-var target;
-setTarget(data.target.isSet);
-
-var drawTimeout;
-var queueMillis = 1000;
-
var menu = {
"": {
"title": "Set target",
@@ -202,7 +171,7 @@ var menu = {
onchange: v => {
data.target.h = v;
},
- format: function (v) { return pad2(v); }
+ format: function (v) {return(settings.time24 ? pad2(v) : formatHourToAMPM(v))}
},
'Minutes': {
value: data.target.m,
@@ -240,6 +209,51 @@ var menu = {
}
};
+function setTarget(set) {
+ if (set) {
+ target = new Date(
+ data.target.Y,
+ data.target.M - 1,
+ data.target.D,
+ data.target.h,
+ data.target.m,
+ data.target.s
+ );
+ data.target.isSet = true;
+ } else {
+ target = new Date();
+ Object.assign(
+ data,
+ {
+ target: {
+ isSet: false,
+ Y: now.getFullYear(),
+ M: now.getMonth() + 1, // Month is zero-based, so add 1
+ D: now.getDate(),
+ h: now.getHours(),
+ m: now.getMinutes(),
+ s: 0
+ }
+ }
+ );
+ menu.Day.value = data.target.D;
+ menu.Month.value = data.target.M;
+ menu.Year.value = data.target.Y;
+ menu.Hours.value = data.target.h;
+ menu.Minutes.value = data.target.m;
+ menu.Seconds.value = 0;
+ }
+
+ writeData();
+}
+
+var target;
+setTarget(data.target.isSet);
+
+var drawTimeout;
+var queueMillis = 1000;
+
+
function queueDraw() {
if (drawTimeout) clearTimeout(drawTimeout);
var delay = queueMillis - (Date.now() % queueMillis);
@@ -359,10 +373,19 @@ function diffToTarget() {
}
function draw() {
- var nowFormatted = formatDateTime(new Date(), settings.dateFormat, settings.time24, temp_displaySeconds);
+ var now = new Date();
+ var nowFormatted = formatDateTime(now, settings.dateFormat, settings.time24, temp_displaySeconds);
var targetFormatted = formatDateTime(target, settings.dateFormat, settings.time24, true);
var diff = diffToTarget();
+ const nowY = now.getFullYear();
+ const nowM = now.getMonth();
+ const nowD = now.getDate();
+
+ const targetY = target.getFullYear();
+ const targetM = target.getMonth();
+ const targetD = target.getDate();
+
var diffYMD;
if (settings.displayMonthsYears)
diffYMD = `${diff.sign}${diff.Y}Y ${diff.M}M ${diff.D}D`;
@@ -391,9 +414,23 @@ function draw() {
g.drawString(">", 4, y + 3);
if (data.target.isSet) {
- // draw target date
g.setFont("Vector", SMALL_FONT_SIZE).setFontAlign(-1, -1).setColor(g.theme.dark ? COLOUR_ORANGE : COLOUR_RED);
- g.drawString(targetFormatted.date, 4 + 16 + 6, y);
+
+ if (nowY == targetY && nowM == targetM && nowD == targetD) {
+ // today
+ g.drawString("TODAY", 4 + 16 + 6, y);
+ } else if (nowY == targetY && nowM == targetM && nowD - targetD == 1) {
+ // yesterday
+ g.drawString("YESTERDAY", 4 + 16 + 6, y);
+ } else if (nowY == targetY && nowM == targetM && targetD - nowD == 1) {
+ // tomorrow
+ g.drawString("TOMORROW", 4 + 16 + 6, y);
+ } else {
+ // general case
+ // draw target date
+ g.drawString(targetFormatted.date, 4 + 16 + 6, y);
+ }
+
y += SMALL_FONT_SIZE;
// draw target time