インスタグラム用正確時間ビューア

インスタグラムの時間要素をユーザーのローカルタイムゾーンフォーマットでローカルタイムゾーンに変換し、タイムゾーン情報を追加します。

このスクリプトの質問や評価の投稿はこちら通報はこちらへお寄せください。
// ==UserScript==
// @name         Exact-Time-Viewer-For-Instagram
// @description  Converts Instagram time elements to local time zone in user's local time zone format with time zone info added.
// @name:ar      عارض-الوقت-الدقيق-لإنستغرام
// @description:ar  يحول عناصر وقت إنستغرام إلى المنطقة الزمنية المحلية بتنسيق المنطقة الزمنية المحلية للمستخدم مع إضافة معلومات المنطقة الزمنية.
// @name:bg      Точен-Преглед-на-Време-за-Инстаграм
// @description:bg  Преобразува елементите за време в Инстаграм в местната часова зона във формата на местната часова зона на потребителя с добавена информация за часовата зона.
// @name:cs      Přesný-Zobrazovač-Času-Pro-Instagram
// @description:cs  Převádí časové prvky Instagramu do místního časového pásma ve formátu místního časového pásma uživatele s přidanými informacemi o časovém pásmu.
// @name:da      Nøjagtig-Tidsviser-Til-Instagram
// @description:da  Konverterer Instagram-tidselementer til lokal tidszone i brugerens lokale tidszoneformat med tilføjede tidszoneoplysninger.
// @name:de      Genaue-Zeit-Anzeige-Für-Instagram
// @description:de  Wandelt Instagram-Zeitelemente in die lokale Zeitzone im Format der lokalen Zeitzone des Benutzers um und fügt Zeitzoneninformationen hinzu.
// @name:el      Ακριβής-Προβολέας-Χρόνου-Για-Instagram
// @description:el  Μετατρέπει τα χρονικά στοιχεία του Instagram στην τοπική ζώνη ώρας στη μορφή της τοπικής ζώνης ώρας του χρήστη με προσθήκη πληροφοριών ζώνης ώρας.
// @name:en      Exact-Time-Viewer-For-Instagram
// @description:en  Converts Instagram time elements to local time zone in user's local time zone format with time zone info added.
// @name:eo      Ekzakta-Tempo-Vidilo-Por-Instagram
// @description:eo  Konvertas Instagram-tempajn elementojn al loka horzono en la loka horzona formato de la uzanto kun aldonitaj horzonaj informoj.
// @name:es      Visor-de-Tiempo-Exacto-Para-Instagram
// @description:es  Convierte los elementos de tiempo de Instagram a la zona horaria local en el formato de la zona horaria local del usuario con información de zona horaria añadida.
// @name:fi      Tarkka-Aikanäkymä-Instagramille
// @description:fi  Muuntaa Instagramin aikaelementit paikalliseen aikavyöhykkeeseen käyttäjän paikallisessa aikavyöhykeformaatissa lisättyjen aikavyöhyketietojen kera.
// @name:fr      Visionneur-de-Temps-Exact-Pour-Instagram
// @description:fr  Convertit les éléments de temps d'Instagram en fuseau horaire local dans le format du fuseau horaire local de l'utilisateur avec des informations de fuseau horaire ajoutées.
// @name:fr-CA   Visionneur-de-Temps-Précis-Pour-Instagram
// @description:fr-CA  Convertit les éléments temporels d'Instagram au fuseau horaire local dans le format du fuseau horaire local de l'utilisateur avec des infos de fuseau horaire ajoutées.
// @name:he      צופה-זמן-מדויק-לאינסטגרם
// @description:he  ממיר את רכיבי הזמן של אינסטגרם לאזור הזמן המקומי בפורמט אזור הזמן המקומי של המשתמש עם מידע נוסף על אזור הזמן.
// @name:hr      Točni-Prikazivač-Vremena-Za-Instagram
// @description:hr  Pretvara vremenske elemente Instagrama u lokalnu vremensku zonu u formatu lokalne vremenske zone korisnika s dodanim informacijama o vremenskoj zoni.
// @name:hu      Pontos-Idő-Néző-Az-Instagramhoz
// @description:hu  Az Instagram időelemeit a helyi időzónába konvertálja a felhasználó helyi időzóna formátumában, időzóna-információval kiegészítve.
// @name:id      Penampil-Waktu-Tepat-Untuk-Instagram
// @description:id  Mengonversi elemen waktu Instagram ke zona waktu lokal dalam format zona waktu lokal pengguna dengan informasi zona waktu ditambahkan.
// @name:it      Visualizzatore-di-Tempo-Esatto-Per-Instagram
// @description:it  Converte gli elementi temporali di Instagram nel fuso orario locale nel formato del fuso orario locale dell'utente con informazioni sul fuso orario aggiunte.
// @name:ja      インスタグラム用正確時間ビューア
// @description:ja  インスタグラムの時間要素をユーザーのローカルタイムゾーンフォーマットでローカルタイムゾーンに変換し、タイムゾーン情報を追加します。
// @name:ka      ზუსტი-დროის-მაჩვენებელი-ინსტაგრამისთვის
// @description:ka  გარდაქმნის ინსტაგრამის დროის ელემენტებს ადგილობრივ დროის სარტყელში მომხმარებლის ადგილობრივი დროის სარტყლის ფორმატში, დროის სარტყლის ინფორმაციის დამატებით.
// @name:ko      인스타그램용-정확한-시간-뷰어
// @description:ko  인스타그램 시간 요소를 사용자의 로컬 시간대 형식으로 로컬 시간대에 변환하고 시간대 정보를 추가합니다.
// @name:nb      Nøyaktig-Tidsviser-For-Instagram
// @description:nb  Konverterer Instagram-tidselementer til lokal tidssone i brukerens lokale tidssoneformat med tidssoneinformasjon lagt til.
// @name:nl      Exacte-Tijd-Weergever-Voor-Instagram
// @description:nl  Converteert Instagram-tijdelementen naar lokale tijdzone in het lokale tijdzoneformaat van de gebruiker met toegevoegde tijdzone-informatie.
// @name:pl      Dokładny-Wyświetlacz-Czasu-Dla-Instagrama
// @description:pl  Konwertuje elementy czasu Instagrama na lokalną strefę czasową w formacie lokalnej strefy czasowej użytkownika z dodanymi informacjami o strefie czasowej.
// @name:pt-BR   Visualizador-de-Tempo-Exato-Para-Instagram
// @description:pt-BR  Converte elementos de tempo do Instagram para o fuso horário local no formato do fuso horário local do usuário com informações de fuso horário adicionadas.
// @name:ro      Vizualizator-de-Timp-Exact-Pentru-Instagram
// @description:ro  Convertește elementele de timp ale Instagram în fusul orar local în formatul fusului orar local al utilizatorului, cu informații despre fusul orar adăugate.
// @name:ru      Точный-Просмотрщик-Времени-Для-Инстаграма
// @description:ru  Преобразует временные элементы Instagram в местный часовой пояс в формате местного часового пояса пользователя с добавленной информацией о часовом поясе.
// @name:sk      Presný-Zobrazovač-Času-Pre-Instagram
// @description:sk  Premieňa časové prvky Instagramu na miestnu časovú zónu vo formáte miestnej časovej zóny používateľa s pridanými informáciami o časovej zóne.
// @name:sr      Тачан-Прегледач-Времена-За-Инстаграм
// @description:sr  Претвара временске елементе Инстаграма у локалну временску зону у формату локалне временске зоне корисника са додатим информацијама о временској зони.
// @name:sv      Exakt-Tidsvisare-För-Instagram
// @description:sv  Konverterar Instagram-tidelement till lokal tidszon i användarens lokala tidszonsformat med tidszonsinformation tillagd.
// @name:th      ตัวแสดงเวลาแม่นยำสำหรับอินสตาแกรม
// @description:th  แปลงองค์ประกอบเวลาของอินสตาแกรมเป็นเขตเวลาท้องถิ่นในรูปแบบเขตเวลาท้องถิ่นของผู้ใช้พร้อมข้อมูลเขตเวลาเพิ่มเติม.
// @name:tr      Instagram-İçin-Kesin-Zaman-Görüntüleyici
// @description:tr  Instagram zaman öğelerini kullanıcının yerel saat dilimi formatında yerel saat dilimine dönüştürür ve saat dilimi bilgisi ekler.
// @name:ug      Instagram-ئۈچۈن-ئېنىق-ۋاقىت-كۆرگۈچى
// @description:ug  Instagram ۋاقىت ئېلېمېنتلىرىنى ئىشلەتكۈچىنىڭ يەرلىك ۋاقىت رايونى فورماتىدا يەرلىك ۋاقىت رايونىغا ئايلاندۇرىدۇ ۋە ۋاقىت رايونى ئۇچۇرى قوشىدۇ.
// @name:uk      Точний-Переглядач-Часу-Для-Інстаграма
// @description:uk  Перетворює часові елементи Instagram на місцевий часовий пояс у форматі місцевого часового поясу користувача з додаванням інформації про часовий пояс.
// @name:vi      Trình-Xem-Giờ-Chính-Xác-Cho-Instagram
// @description:vi  Chuyển đổi các yếu tố thời gian của Instagram sang múi giờ địa phương theo định dạng múi giờ địa phương của người dùng với thông tin múi giờ được thêm vào.
// @name:zh      Instagram精确时间查看器
// @description:zh  将Instagram时间元素转换为用户本地时区格式的本地时区,并添加时区信息。
// @name:zh-CN   Instagram精确时间查看器
// @description:zh-CN  将Instagram时间元素转换为用户本地时区格式的本地时区,并添加时区信息。
// @name:zh-HK   Instagram精確時間檢視器
// @description:zh-HK  將Instagram時間元素轉換為用戶本地時區格式嘅本地時區,並添加時區資訊。
// @name:zh-SG   Instagram精确时间查看器
// @description:zh-SG  将Instagram时间元素转换为用户本地时区格式的本地时区,并添加时区信息。
// @name:zh-TW   Instagram精確時間檢視器
// @description:zh-TW  將Instagram時間元素轉換為使用者本地時區格式的本地時區,並新增時區資訊。
// @namespace    http://tampermonkey.net/
// @version      1.1.3.1
// @match        *://*.instagram.com/*
// @icon                https://www.google.com/s2/favicons?sz=64&domain=instagram.com
// @author       aspen138
// @grant        none
// @license      MIT
// ==/UserScript==

// Port the chrome extension `Exact-Time-Viewer-For-Instagram` to tampermonkey script
// reference: https://github.com/ehmorris/Exact-Time-Viewer-For-Instagram


(function() {
    'use strict';

    const processedElements = new WeakSet();

    function formatDate(datetime) {
        const dateObject = new Date(datetime);
        const time = dateObject.toLocaleTimeString();
        const date = dateObject.toLocaleDateString();
        const localTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;
        return `${time}, ${date} (in the ${localTimeZone} time zone)`;
    }

    function processTimeElement(element) {
        if (!processedElements.has(element)) {
            const datetime = element.getAttribute('datetime');
            if (datetime) {
                const formattedDate = formatDate(datetime);
                const originalContent = element.innerHTML;

                // Store the original content as a data attribute
                element.setAttribute('data-original-content', originalContent);

                // Add event listeners for hover and leave
                element.addEventListener('mouseover', () => {
                    element.innerHTML = formattedDate;
                });

                element.addEventListener('mouseleave', () => {
                    element.innerHTML = originalContent;
                });

                processedElements.add(element);
            }
        }
    }

    function processTimeElements(root) {
        const timeElements = root.querySelectorAll('time[datetime]');
        timeElements.forEach(element => {
            processTimeElement(element);
        });
    }

    // Process existing <time> elements on the page
    processTimeElements(document);

    // Observe for future <time> elements added to the DOM
    const observer = new MutationObserver(mutations => {
        mutations.forEach(mutation => {
            mutation.addedNodes.forEach(node => {
                if (node.nodeType === 1) { // Node.ELEMENT_NODE
                    if (node.tagName && node.tagName.toUpperCase() === 'TIME') {
                        processTimeElement(node);
                    } else {
                        processTimeElements(node);
                    }
                }
            });
        });
    });

    observer.observe(document.body, { childList: true, subtree: true });

})();