Youtube Live Clock

Show present time of the livestream!

当前为 2022-10-20 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Youtube Live Clock
  3. // @namespace https://greasyfork.org/scripts/453367
  4. // @version 1.3
  5. // @description Show present time of the livestream!
  6. // @author Derek
  7. // @match https://www.youtube.com/*
  8. // @grant none
  9. // @noframes
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict'
  14.  
  15. let shortenToNum = {
  16. 'Jan': '01', 'Feb': '02', 'Mar': '03', 'Apr': '04', 'May': '05', 'Jun': '06',
  17. 'Jul': '07', 'Aug': '08', 'Sep': '09', 'Oct': '10', 'Nov': '11', 'Dec': '12'
  18. }
  19.  
  20. let main = () => {
  21. setTimeout(() => {
  22. let liveClock = document.querySelector('.present-time')
  23. if (!liveClock) {
  24. let timeDisplay = document.querySelector('.ytp-time-display').childNodes[1]
  25. let clockElement = document.createElement('span')
  26. clockElement.setAttribute('class', 'present-time')
  27. timeDisplay.appendChild(clockElement)
  28. liveClock = document.querySelector('.present-time')
  29. }
  30.  
  31. let progressBar = document.querySelector('.ytp-progress-bar')
  32. let observer = new MutationObserver(() => {
  33. let isLive = JSON.parse(document.querySelector('.ytd-player-microformat-renderer').textContent).publication
  34. let progressTime = document.querySelector('.ytp-progress-bar').getAttribute('aria-valuenow')
  35.  
  36. if (isLive) {
  37. if (isLive[0].endDate) {
  38. let presentTime = new Date(Date.parse(isLive[0].startDate) + progressTime * 1000)
  39. let date = (presentTime).toString().split(' ')
  40. liveClock.textContent = ` (${date[3]}/${shortenToNum[date[1]]}/${date[2]} ${date[4]}) `
  41. } else {
  42. let second = progressTime % 60
  43. let minute = (progressTime - second) % 3600 / 60
  44. let hour = (progressTime - minute * 60 - second) / 3600
  45. liveClock.textContent = `${hour}:${minute}:${second} `
  46. }
  47. } else liveClock.textContent = ''
  48. })
  49. observer.observe(progressBar, {attributes: true})
  50. }, 1000)
  51. }
  52.  
  53. document.addEventListener('yt-navigate-finish', main)
  54. })();