您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
convert the timezone used in TopCoder from EST/EDT to your local time
- // ==UserScript==
- // @name TopCoder TimeZone UserScript
- // @namespace https://github.com/kmyk
- // @version 1.2
- // @description convert the timezone used in TopCoder from EST/EDT to your local time
- // @author Kimiyuki Onaka
- // @match *://apps.topcoder.com/forums/
- // @match *://apps.topcoder.com/forums/?*module=Category*
- // @match *://apps.topcoder.com/forums/?*module=History*
- // @match *://apps.topcoder.com/forums/?*module=Thread*
- // @match *://apps.topcoder.com/forums/?*module=ThreadList*
- // @match *://apps.topcoder.com/*
- // @match *://community.topcoder.com/longcontest/?*module=ViewStandings*
- // @match *://community.topcoder.com/longcontest/?*module=ViewSubmissionHistory*
- // @match *://community.topcoder.com/longcontest/?*module=ViewExampleHistory*
- // @match *://community.topcoder.com/tc?*module=MatchDetails*
- // @match *://community.topcoder.com/*
- // @require https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment-with-locales.min.js
- // @require https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.16/moment-timezone-with-data-2012-2022.min.js
- // ==/UserScript==
- function convert(text, html) {
- const zone = "America/Indiana/Indianapolis";
- let t = undefined;
- const match = text.match(/^\s*(?:\w+,? )?(\w+ \d+,? 20\d\d at \d+:\d\d [AP]M) (E[SD]T)\s*$/);
- if (match) {
- // example: "Wed, Apr 25, 2018 at 9:04 PM EDT" (https://apps.topcoder.com/forums/?module=Thread&threadID=916943&start=0)
- // example: "Thu, Jun 29 2017 at 12:42 AM EDT" (https://apps.topcoder.com/forums/)
- // example: "Apr 27, 2018 at 12:26 AM EDT" (https://apps.topcoder.com/forums/?module=History)
- const format = "MMM DD YYYY hh:mm A";
- t = moment.tz(match[1], format, zone); // I want to use `match[2]` instead of `zone`, but moment-timezone say "Moment Timezone has no data for EDT". EST is accpeted.
- }
- else if (/^\s*\d\d.\d\d.20\d\d \d\d+:\d\d:\d\d\s*$/.test(text)) {
- // example: "04.22.2018 09:42:47" (https://community.topcoder.com/longcontest/?module=ViewStandings&rd=17143)
- // example: "04.25.2018 14:33:17" (https://community.topcoder.com/longcontest/?module=ViewSubmissionHistory&rd=17143&pm=14889&cr=40099108)
- const format = "MM.DD.YYYY HH:mm:ss";
- t = moment.tz(text, format, zone);
- }
- else if (/^\s*\d\d.\d\d.20\d\d\s*\d\d:\d\d E[SD]T\s*$/.test(text)) {
- // "<strong>04.25.2018</strong><br>21:00 EDT" (https://community.topcoder.com/tc?module=MatchDetails&rd=17143)
- const format = "MM.DD.YYYYHH:mm"; // NOTE: don't add space. it fails if "...YYYY HH..."
- t = moment.tz(text, format, zone);
- }
- else {
- return "";
- }
- return html + " <small>(" + t.local().format() + ")</small>";
- }
- function main() {
- const tags = Array.prototype.slice.call(document.getElementsByTagName("*"));
- tags.reverse(); // to visit leaves at first
- for (const tag of tags) {
- const converted = convert(tag.textContent, tag.innerHTML);
- if (converted) {
- tag.innerHTML = converted;
- }
- }
- }
- main();