Если быть точным: Добро пожаловать в 2020;)
для информации: - список TZ -> https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
- Дата .toLocaleString использование -> https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Date/toLocaleString
[править] добавлено военное время (без секунд и :
разделитель)
первая версия с гражданским и военное время
const OptionsCivil = { hour12:true, hour:'numeric', minute:'2-digit', second:'2-digit' };
const OptionsMilitary = { hour12:false, hour:'2-digit', minute:'2-digit' };
const CivilTime=(dt,dz)=>dt.toLocaleString("en-GB", {...OptionsCivil, timeZone:dz })
const MilitaryTime=(dt,dz)=>
{
let rep = dt.toLocaleString("en-US", {...OptionsMilitary, timeZone:dz }).replace(/:/g,'')
return (rep==='0000') ? 2400 : rep.replace(/^24/, '00'); // specific browsers marmelade
}
setInterval(() => {
let d = new Date();
document.querySelectorAll('.timZon')
.forEach(el=> el.textContent = CivilTime(d, el.dataset.timeZone));
document.querySelectorAll('.timZonM')
.forEach(el=> el.textContent = MilitaryTime(d, el.dataset.timeZone));
}, 1000);
/* or more concise :
setInterval(() => {
let d = new Date();
document.querySelectorAll('.timZon, .timZonM')
.forEach(el=>el.textContent =(el.classList.contains('timZonM')?MilitaryTime:CivilTime)(d, el.dataset.timeZone));
}, 1000);
*/
div.timZon,
div.timZonM {
width: 7em;
text-align: right;
margin:.4em;
color: deeppink;
}
div.timZonM { /* military time */
width: 3em;
color:navy;
}
<div class="timZon" data-time-zone="America/New_York" ></div>
<div class="timZonM" data-time-zone="America/New_York" ></div>
<div class="timZonM" data-time-zone="Asia/Kolkata"></div>
<div class="timZonM" data-time-zone="Europe/Paris"></div>
<div class="timZonM" data-time-zone="Australia/Adelaide"></div>
<div class="timZonM" data-time-zone="Etc/GMT"></div>
<div class="timZonM" data-time-zone="Etc/GMT+4"></div>
<div class="timZonM" data-time-zone="Etc/GMT-5"></div>
После последних комментариев здесь - версия только с военным временем, первая в списке будет единственной, чтобы указать секунд
const OptionsMilitary = { hour12:false, hour:'2-digit', minute:'2-digit', second:'2-digit' };
const MilitaryTime=(elm, dt)=>
{
let [hh,mm,ss] = dt.toLocaleString("en-US", {...OptionsMilitary, timeZone:elm.dataset.timeZone }).split(':')
if ('seconds'in elm.dataset) elm.dataset.seconds = ':'+ss
elm.textContent = (hh=='00'&&mm=='00') ? '2400' : (hh+mm).replace(/^24/, '00'); // specific browsers marmelade
}
setInterval(() => {
let dateTime = new Date();
document.querySelectorAll('.timZonM').forEach(el=>MilitaryTime(el, dateTime));
}, 1000);
div.timZonM { /* military time */
width: 3em;
margin:.3em;
color: navy;
font-size: 20px;
font-family: 'Courier New', Courier, monospace;
letter-spacing: .05em;
}
div.timZonM::after {
content: attr(data-seconds);
color:crimson;
}
<div class="timZonM" data-time-zone="America/New_York"></div>
<div class="timZonM" data-time-zone="Asia/Kolkata"></div>
<div class="timZonM" data-time-zone="Europe/Paris" data-seconds></div> <!-- add data-seconds to show seconds value -->
<!-- as much as you want... -->
<div class="timZonM" data-time-zone="Australia/Adelaide"></div>
<div class="timZonM" data-time-zone="Asia/Kathmandu"></div>
<div class="timZonM" data-time-zone="Etc/GMT"></div>
<div class="timZonM" data-time-zone="Etc/GMT+4" data-seconds></div>
<div class="timZonM" data-time-zone="Etc/GMT-5"></div>
для горизонтального отображения css flex box
const OptionsMilitary = { hour12:false, hour:'2-digit', minute:'2-digit', second:'2-digit' }
, timZonMil_All = document.querySelectorAll('div.timZonMil > div')
;
const MilitaryTime=(elm, dt)=>
{
let [hh,mm,ss] = dt.toLocaleString("en-US", {...OptionsMilitary, timeZone:elm.dataset.timeZone }).split(':')
elm.textContent = (hh=='00'&&mm=='00') ? '2400' : (hh+mm).replace(/^24/, '00'); // specific browsers marmelade
if ('seconds' in elm.dataset) elm.innerHTML += `<span>:${ss}</span>`
}
setInterval(() => {
let dateTime = new Date();
timZonMil_All.forEach(el=>MilitaryTime(el, dateTime));
}, 500);
div.timZonMil {
display: flex;
justify-content: space-between;
min-width: 100vw;
position: absolute;
top: 123px;
color: navy;
font-size: 20px;
font-family: 'Courier New', Courier, monospace;
letter-spacing: .05em;
}
div.timZonMil > div {
min-width: 3.6em;
text-align: center;
}
div.timZonMil > div[data-seconds] {
min-width: 5.2em;
}
div.timZonMil > div > span {
color:crimson;
}
<div class="timZonMil" >
<div data-time-zone="Asia/Tehran"></div>
<div data-time-zone="Etc/GMT" ></div>
<div data-time-zone="Etc/GMT+4" data-seconds ></div>
<div data-time-zone="Etc/GMT-8" ></div>
<div data-time-zone="Etc/GMT-14" ></div>
</div>
Я также изменил второй метод отображения относительно последнего сообщения ypur