Youtube URL Timestamper

Updates the browser URL with the current timestamp every 30 seconds

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

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

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Youtube URL Timestamper
// @description  Updates the browser URL with the current timestamp every 30 seconds
// @namespace    antoniszymanski
// @author       Antoni Szymański
// @version      1.1.1
// @license      MPL-2.0
// @match        *://www.youtube.com/watch*
// ==/UserScript==
(() => {
    "use strict";
    function formatTime(time) {
        const hours = Math.trunc(time / 3600);
        const minutes = Math.trunc(time / 60) % 60;
        const seconds = Math.trunc(time % 60);
        return ((hours > 0 ? hours + "h" : "") +
            (minutes > 0 ? minutes + "m" : "") +
            (seconds > 0 ? seconds + "s" : ""));
    }
    function update() {
        const player = document.querySelector("video");
        if (player === null) {
            return;
        }
        if (isFinite(player.duration) && player.duration <= 600 /* 10 min */) {
            return;
        }
        if (player.currentTime < 120 || // 2 min
            (isFinite(player.duration) && player.duration - player.currentTime <= 120) // 2 min
        ) {
            return;
        }
        const formattedTime = formatTime(player.currentTime);
        const url = new URL(window.location.href);
        if (url.searchParams.get("t") !== formattedTime) {
            url.searchParams.set("t", formattedTime);
            window.history.replaceState(null, "", url);
        }
    }
    setInterval(update, 30000); // 30s
})();