From 756b1dbd65e4bcc1dd4c8f19c9e034d31e68fd0b Mon Sep 17 00:00:00 2001 From: DiTus Date: Wed, 4 Mar 2026 09:11:25 +0100 Subject: [PATCH] feat: standardize date/time format to DD/MM/YYYY 24h and enhance simulation with stop date and auto-data fetching --- .../dashboard/static/js/config/timezone.js | 16 +- src/api/dashboard/static/js/ui/chart.js | 2 +- .../dashboard/static/js/ui/strategy-panel.js | 158 ++++++++++++++++-- 3 files changed, 157 insertions(+), 19 deletions(-) diff --git a/src/api/dashboard/static/js/config/timezone.js b/src/api/dashboard/static/js/config/timezone.js index b3965cb..6755f3c 100644 --- a/src/api/dashboard/static/js/config/timezone.js +++ b/src/api/dashboard/static/js/config/timezone.js @@ -46,7 +46,7 @@ const TimezoneConfig = { const parts = formatter.formatToParts(date); const get = (type) => parts.find(p => p.type === type).value; - return `${get('day')}/${get('month')}/${get('year').slice(-2)} ${get('hour')}:${get('minute')}`; + return `${get('day')}/${get('month')}/${get('year')} ${get('hour')}:${get('minute')}`; }, formatTickMark(timestamp) { @@ -55,13 +55,21 @@ const TimezoneConfig = { const options = { timeZone: tz, - month: '2-digit', day: '2-digit', + year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', hour12: false }; - const formatter = new Intl.DateTimeFormat('en-US', options); - return formatter.format(date).replace(',', ''); + const formatter = new Intl.DateTimeFormat('en-GB', options); + const parts = formatter.formatToParts(date); + const get = (type) => parts.find(p => p.type === type).value; + + // If it's exactly midnight, just show the date, otherwise show time too + const isMidnight = get('hour') === '00' && get('minute') === '00'; + if (isMidnight) { + return `${get('day')}/${get('month')}/${get('year')}`; + } + return `${get('day')}/${get('month')} ${get('hour')}:${get('minute')}`; } }; diff --git a/src/api/dashboard/static/js/ui/chart.js b/src/api/dashboard/static/js/ui/chart.js index 1050d85..60b920d 100644 --- a/src/api/dashboard/static/js/ui/chart.js +++ b/src/api/dashboard/static/js/ui/chart.js @@ -123,7 +123,7 @@ constructor() { }, localization: { timeFormatter: (timestamp) => { - return TimezoneConfig.formatTickMark(timestamp); + return TimezoneConfig.formatDate(timestamp * 1000); }, }, handleScroll: { diff --git a/src/api/dashboard/static/js/ui/strategy-panel.js b/src/api/dashboard/static/js/ui/strategy-panel.js index 56a5bba..d7069aa 100644 --- a/src/api/dashboard/static/js/ui/strategy-panel.js +++ b/src/api/dashboard/static/js/ui/strategy-panel.js @@ -9,6 +9,26 @@ let posSizeChart = null; const STORAGE_KEY = 'ping_pong_settings'; +function formatDisplayDate(timestamp) { + if (!timestamp) return ''; + const date = new Date(timestamp); + const day = String(date.getDate()).padStart(2, '0'); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const year = date.getFullYear(); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + return `${day}/${month}/${year} ${hours}:${minutes}`; +} + +function parseDisplayDate(str) { + if (!str) return null; + const regex = /^(\d{2})\/(\d{2})\/(\d{4})\s(\d{2}):(\d{2})$/; + const match = str.trim().match(regex); + if (!match) return null; + const [_, day, month, year, hours, minutes] = match; + return new Date(year, month - 1, day, hours, minutes); +} + function getSavedSettings() { const saved = localStorage.getItem(STORAGE_KEY); if (!saved) return null; @@ -22,6 +42,7 @@ function getSavedSettings() { function saveSettings() { const settings = { startDate: document.getElementById('simStartDate').value, + stopDate: document.getElementById('simStopDate').value, contractType: document.getElementById('simContractType').value, direction: document.getElementById('simDirection').value, capital: document.getElementById('simCapital').value, @@ -69,6 +90,18 @@ export function renderStrategyPanel() { activeIndicators = window.getActiveIndicators?.() || []; const saved = getSavedSettings(); + // Format initial values for display + let startDisplay = saved?.startDate || '01/01/2026 00:00'; + let stopDisplay = saved?.stopDate || ''; + + // If the saved value is in ISO format (from previous version), convert it + if (startDisplay.includes('T')) { + startDisplay = formatDisplayDate(new Date(startDisplay)); + } + if (stopDisplay.includes('T')) { + stopDisplay = formatDisplayDate(new Date(stopDisplay)); + } + container.innerHTML = `