From 289fb2897d02fc66b8dc94e9355baacb4667e6e4 Mon Sep 17 00:00:00 2001 From: dan63047 Date: Tue, 26 Apr 2022 22:17:37 +0300 Subject: [PATCH] fixed timestamps + Intl.DateTimeFormat() --- script.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/script.js b/script.js index d1ac732..950c683 100644 --- a/script.js +++ b/script.js @@ -4,13 +4,13 @@ var msec_display = true; var fullscreen = false; var other_counters = [ // Title EN, Title RU, Start Unix timestamp, End Unix timestamp, Description EN, Description RU ["UNIX unsinged 32-bit timestamp", "UNIX 32 бита без знака", 0n, 4294967295n, "Developers of some systems have thought that singed 32-bit may not be enough and decided to use unsinged 32-bit.", "Разработчики некоторых систем додумались, что 32 бита со знаком однажды может не хватить и решили использовать 32 бита без знака."], - ["FAT filesystems timestamps", "Штампы времени файловой системы FAT", 315532800n, 4354819200n, "", "На каждую отметку времени отводится четыре байта: два - на дату и два - на время. Год хранится в формате количества лет от начала эпохи Microsoft. Отсюда и диапазон - от 1980 до 2107 года"], - ["ext4 filesystems timestamps", "Штампы времени файловой системы ext4", -2147472000n, 17176838400n, "", ""], - ["NTFS filesystems timestamps", "Штампы времени файловой системы NTFS", -11644473600n, 1833029913600n, "File times are 64-bit numbers counting 100-nanosecond intervals (ten million per second) since 1601, which is 58,000+ years", "Для хранения даты и времени отведено 64 бита; шаг — 100 наносекунд (десять миллионов интервалов в секунду). Это позволяет указать дату и время в промежутке из 58 тысяч лет."], + ["FAT filesystems timestamps", "Штампы времени файловой системы FAT", 315532800n, 4354819198n, "", "На каждую отметку времени отводится четыре байта: два - на дату и два - на время. Год хранится в формате количества лет от начала эпохи Microsoft. Отсюда и диапазон - от 1980 до 2107 года"], + ["ext4 filesystems timestamps", "Штампы времени файловой системы ext4", -2147472000n, 15032385529n, "Inode Timestamps", ""], + ["NTFS filesystems timestamps", "Штампы времени файловой системы NTFS", -11644473600n, 1833029984880n, "File times are 64-bit numbers counting 100-nanosecond intervals (ten million per second) since 1601, which is 58,000+ years", "Для хранения даты и времени отведено 64 бита; шаг — 100 наносекунд (десять миллионов интервалов в секунду). Это позволяет указать дату и время в промежутке из 58 тысяч лет."], // ["Year 32,768 bug", "Проблема 32 768 года", -62167219200, 971890963200, "", ""], // ["Year 65,536 bug", "Проблема 65 536 года", -62167219200, 2005949145600, "", ""], ["UNIX singed 64-bit timestamp", "UNIX 64 бита со знаком", 0n, 9223372036854775807n, "Proposed as a solution to problem 2038 and turns it into problem 292277026596 because the extreme time that can be represented by this format is December 4, 292,277,026,596, 15:30:08 UTC.", "Предлагается в качестве решения проблемы 2038 и превращает её в проблему 292277026596 года, потому что крайнее время, которое может быть представлено данным форматом - 4 Декабря 292 277 026 596 года, 15:30:08 UTC."], - ["UNIX unsinged 64-bit timestamp", "UNIX 64 бита без знака", 0n, 18446744073709551615n, "Humanity will never get to that point, don't worry", "Человечество никогда не доживёт до этого момента, не волнуйтесь"], + ["UNIX unsinged 64-bit timestamp", "UNIX 64 бита без знака", 0n, 18446744073709551615n, "Humanity will never get to November 29, 584,554,051,223, 16:51:49 UTC, don't worry", "Человечество никогда не доживёт до 29 ноября 584 554 051 223 года, 16:51:49 UTC, не волнуйтесь"], ]; var language_user = window.navigator ? (window.navigator.language || window.navigator.systemLanguage || @@ -106,10 +106,13 @@ function Cycle() { let other_counters_html = (language_site == "ru") ? "

Другие, более далёкие проблемы времени в вычислительной технике

" : "

Other, more distant time problems in computing

"; other_counters.forEach(element => { l = element[3] - BigInt(Math.trunc(timestamp)); + date_from = new Date(parseInt(element[2])*1000); + date_to = new Date(parseInt(element[3])*1000); + date_to_local = new Intl.DateTimeFormat(language_site, {timeZone: 'UTC', weekday: 'short', year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric', timeZoneName: 'short'}) other_counters_html = other_counters_html + '

'+ element[(language_site == "ru") ? 1 : 0] + '

' + l.toLocaleString(language_site) + '
' // second argument: {notation: "compact", compactDisplay: "long", style: "unit", unit: "second", unitDisplay: 'long'} + ((timestamp-parseInt(element[2]))/(parseInt(element[3])-parseInt(element[2]))).toLocaleString(language_site, {style: "percent", minimumFractionDigits: 8}) - + " · " + new Date(parseInt(element[2])*1000).toUTCString() + " - " + new Date(parseInt(element[3])*1000).toUTCString() + + " · "; try {other_counters_html = other_counters_html + date_to_local.format(date_from)} catch (e) {other_counters_html = other_counters_html + ((element[2] / 60n / 60n / 24n / 365n) + 1970n).toLocaleString(language_site, {style: "unit", unit: "year"})}; other_counters_html = other_counters_html + " ‒ "; try {other_counters_html = other_counters_html + date_to_local.format(date_to)} catch (e) {other_counters_html = other_counters_html + ((element[3] / 60n / 60n / 24n / 365n) + 1970n).toLocaleString(language_site, {style: "unit", unit: "year"})}; other_counters_html = other_counters_html + ' · ' + (l / 60n / 60n / 24n / 365n).toLocaleString(language_site, {style: "unit", unit: "year"}) + ' ' + (l / 60n / 60n / 24n % 365n).toLocaleString(language_site, {style: "unit", unit: "day"}) + ' ' + ("0" + (l / 60n / 60n % 24n)).slice(-2) + ':' + ("0" + (l / 60n % 60n)).slice(-2) + ':' + ("0" + (l % 60n)).slice(-2) + '

' + element[(language_site == "ru") ? 5 : 4] + '

'; });