My Torn Time Table

Shows your local time and a table to convert Torn time to your local time

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         My Torn Time Table
// @namespace    https://bypxbyp.com
// @version      0.4.0
// @description  Shows your local time and a table to convert Torn time to your local time
// @license      MIT
// @author       BypXByp [3243346]
// @match        https://www.torn.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=torn.com
// @run-at       document-start
// @grant        none
// ==/UserScript==

window.addEventListener('load', function() {
    'use strict';

    var bShowOnLoad = 1; //Should the table automatically be expanded?  0=No, 1=Yes

    var theTimeTable;
    var timeSpan = document.querySelector('.server-date-time');

    if (timeSpan) {
        var timeString = timeSpan.textContent.trim();
        var timeRegex = /(\d{1,2}):(\d{2}):(\d{2})/;
        var match = timeString.match(timeRegex);
        if (match) {
            var hours = parseInt(match[1], 10);
            var minutes = parseInt(match[2], 10);
            var seconds = parseInt(match[3], 10);

            var currentDate = new Date();
            var timeZoneOffsetMinutes = currentDate.getTimezoneOffset();
            var timeZoneOffsetHours = -1 * (timeZoneOffsetMinutes / 60);
            var timeZoneOffsetHoursInteger = Math.round(timeZoneOffsetHours);

            var tl0 = hours + timeZoneOffsetHours;
            var tl1 = hours + timeZoneOffsetHours + 1;
            var tl2 = hours + timeZoneOffsetHours + 2;
            var tl3 = hours + timeZoneOffsetHours + 3;
            var tl4 = hours + timeZoneOffsetHours + 4;
            var tl5 = hours + timeZoneOffsetHours + 5;
            var tl6 = hours + timeZoneOffsetHours + 6;
            var tl7 = hours + timeZoneOffsetHours + 7;
            var tl8 = hours + timeZoneOffsetHours + 8;
            var tl9 = hours + timeZoneOffsetHours + 9;
            var tl10 = hours + timeZoneOffsetHours + 10;
            var tl11 = hours + timeZoneOffsetHours + 11;
            var tl12 = hours + timeZoneOffsetHours + 12;
            var tl13 = hours + timeZoneOffsetHours + 13;
            var tl14 = hours + timeZoneOffsetHours + 14;
            var tl15 = hours + timeZoneOffsetHours + 15;
            var tl16 = hours + timeZoneOffsetHours + 16;
            var tl17 = hours + timeZoneOffsetHours + 17;
            var tl18 = hours + timeZoneOffsetHours + 18;
            var tl19 = hours + timeZoneOffsetHours + 19;
            var tl20 = hours + timeZoneOffsetHours + 20;
            var tl21 = hours + timeZoneOffsetHours + 21;
            var tl22 = hours + timeZoneOffsetHours + 22;
            var tl23 = hours + timeZoneOffsetHours + 23;
            if (tl0 < 0) tl0 += 24;
            if (tl1 < 0) tl1 += 24;
            if (tl2 < 0) tl2 += 24;
            if (tl3 < 0) tl3 += 24;
            if (tl4 < 0) tl4 += 24;
            if (tl5 < 0) tl5 += 24;
            if (tl6 < 0) tl6 += 24;
            if (tl7 < 0) tl7 += 24;
            if (tl8 < 0) tl8 += 24;
            if (tl9 < 0) tl9 += 24;
            if (tl10 < 0) tl10 += 24;
            if (tl11 < 0) tl11 += 24;
            if (tl12 < 0) tl12 += 24;
            if (tl13 < 0) tl13 += 24;
            if (tl14 < 0) tl14 += 24;
            if (tl15 < 0) tl15 += 24;
            if (tl16 < 0) tl16 += 24;
            if (tl17 < 0) tl17 += 24;
            if (tl18 < 0) tl18 += 24;
            if (tl19 < 0) tl19 += 24;
            if (tl20 < 0) tl20 += 24;
            if (tl21 < 0) tl21 += 24;
            if (tl22 < 0) tl22 += 24;
            if (tl23 < 0) tl23 += 24;
            if (tl0 > 23) tl0 -= 24;
            if (tl1 > 23) tl1 -= 24;
            if (tl2 > 23) tl2 -= 24;
            if (tl3 > 23) tl3 -= 24;
            if (tl4 > 23) tl4 -= 24;
            if (tl5 > 23) tl5 -= 24;
            if (tl6 > 23) tl6 -= 24;
            if (tl7 > 23) tl7 -= 24;
            if (tl8 > 23) tl8 -= 24;
            if (tl9 > 23) tl9 -= 24;
            if (tl10 > 23) tl10 -= 24;
            if (tl11 > 23) tl11 -= 24;
            if (tl12 > 23) tl12 -= 24;
            if (tl13 > 23) tl13 -= 24;
            if (tl14 > 23) tl14 -= 24;
            if (tl15 > 23) tl15 -= 24;
            if (tl16 > 23) tl16 -= 24;
            if (tl17 > 23) tl17 -= 24;
            if (tl18 > 23) tl18 -= 24;
            if (tl19 > 23) tl19 -= 24;
            if (tl20 > 23) tl20 -= 24;
            if (tl21 > 23) tl21 -= 24;
            if (tl22 > 23) tl22 -= 24;
            if (tl23 > 23) tl23 -= 24;
            var tc0 = hours;
            var tc1 = hours + 1;
            var tc2 = hours + 2;
            var tc3 = hours + 3;
            var tc4 = hours + 4;
            var tc5 = hours + 5;
            var tc6 = hours + 6;
            var tc7 = hours + 7;
            var tc8 = hours + 8;
            var tc9 = hours + 9;
            var tc10 = hours + 10;
            var tc11 = hours + 11;
            var tc12 = hours + 12;
            var tc13 = hours + 13;
            var tc14 = hours + 14;
            var tc15 = hours + 15;
            var tc16 = hours + 16;
            var tc17 = hours + 17;
            var tc18 = hours + 18;
            var tc19 = hours + 19;
            var tc20 = hours + 20;
            var tc21 = hours + 21;
            var tc22 = hours + 22;
            var tc23 = hours + 23;
            if (tc0 > 23) tc0 -= 24;
            if (tc1 > 23) tc1 -= 24;
            if (tc2 > 23) tc2 -= 24;
            if (tc3 > 23) tc3 -= 24;
            if (tc4 > 23) tc4 -= 24;
            if (tc5 > 23) tc5 -= 24;
            if (tc6 > 23) tc6 -= 24;
            if (tc7 > 23) tc7 -= 24;
            if (tc8 > 23) tc8 -= 24;
            if (tc9 > 23) tc9 -= 24;
            if (tc10 > 23) tc10 -= 24;
            if (tc11 > 23) tc11 -= 24;
            if (tc12 > 23) tc12 -= 24;
            if (tc13 > 23) tc13 -= 24;
            if (tc14 > 23) tc14 -= 24;
            if (tc15 > 23) tc15 -= 24;
            if (tc16 > 23) tc16 -= 24;
            if (tc17 > 23) tc17 -= 24;
            if (tc18 > 23) tc18 -= 24;
            if (tc19 > 23) tc19 -= 24;
            if (tc20 > 23) tc20 -= 24;
            if (tc21 > 23) tc21 -= 24;
            if (tc22 > 23) tc22 -= 24;
            if (tc23 > 23) tc23 -= 24;

            var newHours = hours + timeZoneOffsetHours;
            var sMinutesLead = "";
            if (minutes < 10) sMinutesLead = "0";

            theTimeTable = '<div><div><a class="toggleCollapseTimeTable" style="cursor: pointer;">Toggle Time Table</a></div><table id="myTornTimeTable" style="color:#e3e3e3;text-align:center;width:100%;"><tr><td colspan=3 style="border-bottom: 1pt solid black;border-top: 1pt solid black;color:#e3e3e3;">Local: ' + tl0 + ':' + sMinutesLead + minutes + '</td></tr><tr><td style="color:#e3e3e3;" width=33%>Add</td><td style="color:#e3e3e3;" width=34%>TCT</td><td style="color:#e3e3e3;" width=33%>Local</td></tr><tr><td style="color:#e3e3e3;">1</td><td style="color:#e3e3e3;">' + tc1 + '</td><td style="color:#e3e3e3;">' + tl1 + '</td></tr><tr><td style="color:#e3e3e3;">2</td><td style="color:#e3e3e3;">' + tc2 + '</td><td style="color:#e3e3e3;">' + tl2 + '</td></tr><tr><td style="color:#e3e3e3;">3</td><td style="color:#e3e3e3;">' + tc3 + '</td><td style="color:#e3e3e3;">' + tl3 + '</td></tr><tr><td style="color:#e3e3e3;">4</td><td style="color:#e3e3e3;">' + tc4 + '</td><td style="color:#e3e3e3;">' + tl4 + '</td></tr><tr><td style="color:#e3e3e3;">5</td><td style="color:#e3e3e3;">' + tc5 + '</td><td style="color:#e3e3e3;">' + tl5 + '</td></tr><tr><td style="color:#e3e3e3;">6</td><td style="color:#e3e3e3;">' + tc6 + '</td><td style="color:#e3e3e3;">' + tl6 + '</td></tr><tr><td style="color:#e3e3e3;">7</td><td style="color:#e3e3e3;">' + tc7 + '</td><td style="color:#e3e3e3;">' + tl7 + '</td></tr><tr><td style="color:#e3e3e3;">8</td><td style="color:#e3e3e3;">' + tc8 + '</td><td style="color:#e3e3e3;">' + tl8 + '</td></tr><tr><td style="color:#e3e3e3;">9</td><td style="color:#e3e3e3;">' + tc9 + '</td><td style="color:#e3e3e3;">' + tl9 + '</td></tr><tr><td style="color:#e3e3e3;">10</td><td style="color:#e3e3e3;">' + tc10 + '</td><td style="color:#e3e3e3;">' + tl10 + '</td></tr><tr><td style="color:#e3e3e3;">11</td><td style="color:#e3e3e3;">' + tc11 + '</td><td style="color:#e3e3e3;">' + tl11 + '</td></tr><tr><td style="color:#e3e3e3;">12</td><td style="color:#e3e3e3;">' + tc12 + '</td><td style="color:#e3e3e3;">' + tl12 + '</td></tr><tr><td style="color:#e3e3e3;">13</td><td style="color:#e3e3e3;">' + tc13 + '</td><td style="color:#e3e3e3;">' + tl13 + '</td></tr><tr><td style="color:#e3e3e3;">14</td><td style="color:#e3e3e3;">' + tc14 + '</td><td style="color:#e3e3e3;">' + tl14 + '</td></tr><tr><td style="color:#e3e3e3;">15</td><td style="color:#e3e3e3;">' + tc15 + '</td><td style="color:#e3e3e3;">' + tl15 + '</td></tr><tr><td style="color:#e3e3e3;">16</td><td style="color:#e3e3e3;">' + tc16 + '</td><td style="color:#e3e3e3;">' + tl16 + '</td></tr><tr><td style="color:#e3e3e3;">17</td><td style="color:#e3e3e3;">' + tc17 + '</td><td style="color:#e3e3e3;">' + tl17 + '</td></tr><tr><td style="color:#e3e3e3;">18</td><td style="color:#e3e3e3;">' + tc18 + '</td><td style="color:#e3e3e3;">' + tl18 + '</td></tr><tr><td style="color:#e3e3e3;">19</td><td style="color:#e3e3e3;">' + tc19 + '</td><td style="color:#e3e3e3;">' + tl19 + '</td></tr><tr><td style="color:#e3e3e3;">20</td><td style="color:#e3e3e3;">' + tc20 + '</td><td style="color:#e3e3e3;">' + tl20 + '</td></tr><tr><td style="color:#e3e3e3;">21</td><td style="color:#e3e3e3;">' + tc21 + '</td><td style="color:#e3e3e3;">' + tl21 + '</td></tr><tr><td style="color:#e3e3e3;">22</td><td style="color:#e3e3e3;">' + tc22 + '</td><td style="color:#e3e3e3;">' + tl22 + '</td></tr><tr><td style="color:#e3e3e3;">23</td><td style="color:#e3e3e3;">' + tc23 + '</td><td style="color:#e3e3e3;">' + tl23 + '</td></tr></table></div>';
        } else {
            theTimeTable = 'Error (i2)';
        }
    } else {
        theTimeTable = 'Error (i1)';
    }

    var tempDiv = document.createElement('div');

    tempDiv.innerHTML = theTimeTable;

    while (tempDiv.firstChild) {
        timeSpan.parentNode.insertBefore(tempDiv.firstChild, timeSpan.nextSibling);
    }

    if (bShowOnLoad) {
		$('#myTornTimeTable').css('display', '');
	} else {
		$('#myTornTimeTable').css('display', 'none');
	}

	waitForElementToExist('.toggleCollapseTimeTable').then(()=>{
		$('.toggleCollapseTimeTable').on('click', function() {
			if ($('#myTornTimeTable').css('display') == 'none') {
				$('#myTornTimeTable').css('display', '');
			} else {
				$('#myTornTimeTable').css('display', 'none');
			}
		})
	})

	function waitForElementToExist(selector) {
		return new Promise(resolve => {
			if (document.querySelector(selector)) {
				return resolve(document.querySelector(selector));
			}
			const observer = new MutationObserver(() => {
				if (document.querySelector(selector)) {
					resolve(document.querySelector(selector));
					observer.disconnect();
				}
			});
			observer.observe(document.body, {
				subtree: true,
				childList: true,
			});
		});
	}
}, false);