diff --git a/apps/elapsed_t/ChangeLog b/apps/elapsed_t/ChangeLog index 2286a7f70..45cb47c9a 100644 --- a/apps/elapsed_t/ChangeLog +++ b/apps/elapsed_t/ChangeLog @@ -1 +1,2 @@ -0.01: New App! \ No newline at end of file +0.01: New App! +0.02: Handle AM/PM time in the "set target" menu. Add yesterday/today/tomorrow when showing target date to improve readability. \ No newline at end of file diff --git a/apps/elapsed_t/app.js b/apps/elapsed_t/app.js index f799c4f4c..b38735a32 100644 --- a/apps/elapsed_t/app.js +++ b/apps/elapsed_t/app.js @@ -41,7 +41,7 @@ var data = Object.assign({ D: now.getDate(), h: now.getHours(), m: now.getMinutes(), - s: now.getSeconds() + s: 0 } }, require('Storage').readJSON(APP_NAME + ".data.json", true) || {}); @@ -106,12 +106,19 @@ function formatDateTime(date, dateFormat, time24, showSeconds) { var ampm = (h >= 12 ? 'PM' : 'AM'); var h_ampm = h % 12; h_ampm = (h_ampm == 0 ? 12 : h_ampm); - formattedDateTime.time = `${h_ampm}:${mm}${showSeconds ? `:${ss}` : ''}${ampm}`; + formattedDateTime.time = `${h_ampm}:${mm}${showSeconds ? `:${ss}` : ''} ${ampm}`; } 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 diff --git a/apps/elapsed_t/metadata.json b/apps/elapsed_t/metadata.json index fe9af630f..7f8460e49 100644 --- a/apps/elapsed_t/metadata.json +++ b/apps/elapsed_t/metadata.json @@ -3,7 +3,7 @@ "name": "Elapsed Time Clock", "shortName": "Elapsed Time", "type": "clock", - "version":"0.01", + "version":"0.02", "description": "A clock that calculates the time difference between now and any given target date.", "tags": "clock,tool", "supports": ["BANGLEJS2"], diff --git a/apps/elapsed_t/screenshot2.png b/apps/elapsed_t/screenshot2.png index 67dd4f186..00ad8aa36 100644 Binary files a/apps/elapsed_t/screenshot2.png and b/apps/elapsed_t/screenshot2.png differ