1337X - convert torrent timestamps to relative format

Converts torrent upload timestamps to relative format

当前为 2021-07-14 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        1337X - convert torrent timestamps to relative format
// @namespace   darkred
// @version     2021.7.14
// @description Converts torrent upload timestamps to relative format
// @author      darkred
// @license     MIT
// @include     /^https:\/\/(www\.)?1337x\.(to|st|ws|eu|se|is|gd|unblocked\.dk)((?!\/torrent)).*$/
// @grant       none
// @require     https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js
// @require     https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.31/moment-timezone-with-data-10-year-range.min.js
// @supportURL  https://github.com/darkred/Userscripts/issues
// ==/UserScript==

// Official mirrors list: https://1337x.to/about

'use strict';
/* global moment */





// 11:59am         ---> h:hha
// 10am Oct. 30th  ---> haA MMM. Do
// 11pm Nov. 4th
// Oct. 31st '20



// Based on the timestamp on the footer of each RARBG page --> "Sat, 01 May 2020 20:14:56 +0200",
// the script takes that the server time is GMT+2 and that it doesn't take DST.
// Also, the script uses the 'moment-timezone' library as it takes DST offsets into account when converting the timestamps to user/local timezone.

// This is no typo:
// const serverTimezone = 'Etc/GMT+2';  	// -02:00	-02:00  (=no DST)
const serverTimezone = 'Etc/GMT-2';  		// +02:00	+02:00  (=no DST)

// const serverTimezone = 'Etc/GMT-1';

const localTimezone = moment.tz.guess();    // In my case ----> +02:00	+03:00  (DST)

// const format = 'MM/DD/YYYY HH:mm:ss';
// const format = 'YYYY-MM-DD HH:mm:ss';
moment.locale('en');
const format = ['h:mma', 'ha MMM. Do', 'MMM. Do \'YY'];
const formatTooltip1 = 'h:mma'; 		// the 1st element of the above array.
const formatTooltip2 = 'ha MMM. Do';	// the 2st element of the array (there can be no 3rd format, e.g. Oct. 31st '20 is only date, not time ).

// Customize the strings in the locale to display "1 minute ago" instead of "a minute ago" (https://github.com/moment/moment/issues/3764#issuecomment-279928245)
moment.updateLocale('en', {
	relativeTime: {
		future: 'in %s',
		past:   '%s ago',
		s:  'seconds',
		m:  '1 minute',
		mm: '%d minutes',
		h:  '1 hour',
		hh: '%d hours',
		d:  '1 day',
		dd: '%d days',
		M:  '1 month',
		MM: '%d months',
		y:  '1 year',
		yy: '%d years'
	}
});


function convertToLocalTimezone(timestamps) {
	for (let i = 0; i < timestamps.length; i++) {
		let initialTimestamp = timestamps[i].textContent;
		if (moment(initialTimestamp, format, true).isValid()) {		// As of moment.js v2.3.0, you may specify a boolean for the last argument to make Moment use strict parsing. Strict parsing requires that the format and input match exactly, including delimeters.
			let convertedToLocalTimezone = moment.tz(initialTimestamp, format, serverTimezone).tz(localTimezone);
			timestamps[i].textContent = convertedToLocalTimezone.fromNow();

			// timestamps[i].title = initialTimestamp;
			if (moment(initialTimestamp, formatTooltip1, true).isValid()) {
				timestamps[i].title = convertedToLocalTimezone.format(formatTooltip1);
			} else if (moment(initialTimestamp, formatTooltip2, true).isValid()) {
				timestamps[i].title = convertedToLocalTimezone.format(formatTooltip2);
				// timestamps[i].title = convertedToLocalTimezone.toISOString();	// Display timestamps in tooltips in ISO 8601 format, combining date and time  (https://stackoverflow.com/questions/25725019/how-do-i-format-a-date-as-iso-8601-in-moment-js/)
			}
		}
	}


	// recalculate the relative dates every 1 min
	(function(){
		for (let i = 0; i < timestamps.length; i++) {
			// timestamps[i].textContent = moment(timestamps[i].title).fromNow();

			if (timestamps[i].title !== '') {
				let tooltipValue = timestamps[i].title;
				let convertedToLocalTimezone = moment(tooltipValue, format); // no need to reconvert, it's already in local timezone
				timestamps[i].textContent = convertedToLocalTimezone.fromNow();
			}

		}
		// setTimeout(arguments.callee, 10 * 1000); 	// 10 * 1000 msec = 10 sec = 1/6 min
		setTimeout(arguments.callee, 60 * 1000); 	// 60 * 1000 msec = 1 min
	})();


}

// const timestamps = document.querySelectorAll('tr.lista2 td:nth-child(3)');
const timestamps = document.querySelectorAll('tbody .coll-date');
convertToLocalTimezone(timestamps);