Greasy Fork 支持简体中文。

Twitter時計

Twitterに 時計を 表示します。

// ==UserScript==
// @name           Twitter時計
// @name:en        Twitter Clock
// @namespace      http://lit.link/toracatman
// @version        2025-02-22
// @description    Twitterに 時計を 表示します。
// @description:en Display a Clock on Twitter.
// @author         トラネコマン
// @match          https://x.com/*
// @icon           data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant          none
// @license        MIT
// ==/UserScript==

//言語,ja: 日本語,en: 英語
//Language, ja: Japanese, en: English
var language = "ja";

/*
曜日の 色
0: 白のみ
1: 日: ピンク,土: 青,他: 白
2: 日: ピンク,月: 紫,火: オレンジ,水: 灰色,木: 緑,金: 黄色,土: 青

Color of Day
0: Only White
1: Sunday: Pink, Saturday: Blue, Other: White
2: Sunday: Pink, Monday: Purple, Tuesday: Orange, Wednesday: Gray, Thursday: Green, Friday: Yellow, Saturday: Blue
*/
var day_color = 1;

//true: 12, false: 24
var ap = false;

(() => {
    var mn = {
        ja: ["雅月", "菲月", "瑪月", "艾月", "緬月", "淳月", "茱月", "奥月", "摂月", "憶月", "衲月", "迪月", "繧月"],
        en: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "Irvember"]
    };
    var dn = {
        ja: ["日", "月", "火", "水", "木", "金", "土"],
        en: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
    };
    var format = {
        ja: "YYYY年 MM DD日<br>WW曜日<br>hh:mm:ss AP",
        en: "hh:mm:ss AP<br>WW<br>MM DD, YYYY",
    };
    var dc = ["249, 24, 128", "120, 86, 255", "255, 122, 0", "139, 152, 165", "0, 186, 124", "255, 212, 0", "29, 155, 240"];
    var d;

    var a;
    var b;
    var u = () => {
        if (typeof a === "undefined") {
            var t = document.querySelector('aside:has(a[href^="/i/connect_people"])');
            if (t != null) {
                t = t.parentNode.parentNode;
                a = t.cloneNode(true);
                a.querySelector("div").style.minHeight = "auto";
                a.querySelector("aside").setAttribute("aria-label", "時計");
                b = a.querySelector("aside div");
                b.style.display = "block";
                a.querySelector("ul").remove();
                a.querySelector("a").remove();
            }
        }
        if (typeof a !== "undefined") {
            var t = document.querySelector('div[data-testid="sidebarColumn"] div:has(> nav)');
            if (t != null) {
                d = new Date();

                var day = d.getDay();
                var day_str = day_str = dn[language][day];
                if ((day_color == 1 && (day == 0 || day == 6)) || day_color == 2) {
                    day_str = `<span style="color: rgb(${dc[day]});">${day_str}</span>`;
                }

                var str = format[language];
                str = str.replace("YYYY", d.getFullYear());
                str = str.replace("MM", mn[language][d.getMonth()]);
                str = str.replace("DD", d.getDate());
                str = str.replace("WW", day_str);
                var h = d.getHours();
                str = str.replace("hh", ap ? h % 12 : h);
                str = str.replace("mm", d.getMinutes().toString().padStart(2, "0"));
                str = str.replace("ss", d.getSeconds().toString().padStart(2, "0"));
                str = str.replace("AP", ap ? (h < 12 ? "AM" : "PM") : "");

                b.innerHTML = str.trim();

                var p = t.parentNode.firstElementChild;
                if (p.querySelector("form") != null) p = p.nextElementSibling.nextElementSibling;
                p.before(a);
            }
        }
        d = new Date();
        setTimeout(u, 1000 - d.getMilliseconds());
    }
    d = new Date();
    setTimeout(u, 1000 - d.getMilliseconds());
})();