Youtube Live Clock

Show present time of the livestream!

目前為 2022-10-25 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Youtube Live Clock
  3. // @namespace https://greasyfork.org/scripts/453367
  4. // @version 1.4.0
  5. // @description Show present time of the livestream!
  6. // @author Derek
  7. // @match *://www.youtube.com/*
  8. // @grant none
  9. // @noframes
  10. // ==/UserScript==
  11.  
  12. let twoDigit = (num) => {
  13. if (String(num).length === 2) return num
  14. else return '0' + String(num)
  15. }
  16. let formatTime = (time) => {
  17. let second = time % 60
  18. let minute = (time - second) % 3600 / 60
  19. let hour = (time - minute * 60 - second) / 3600
  20.  
  21. if (time < 3600) return `${minute}:${twoDigit(second)} `
  22. else return `${hour}:${twoDigit(minute)}:${twoDigit(second)} `
  23. }
  24. let getClock = () => {
  25. let liveClock = document.querySelector('.present-time')
  26. if (!liveClock) {
  27. let timeDisplay = document.querySelectorAll('.ytp-time-display')
  28. let clockElement = document.createElement('span')
  29. clockElement.setAttribute('class', 'present-time')
  30. timeDisplay[timeDisplay.length - 1].childNodes[1].appendChild(clockElement)
  31. liveClock = document.querySelector('.present-time')
  32. }
  33. return liveClock
  34. }
  35. let updateTime = () => {
  36. let isLive = JSON.parse(document.querySelector('.ytd-player-microformat-renderer').textContent).publication
  37. if (isLive) {
  38. let progressBar = document.querySelectorAll('.ytp-progress-bar')
  39. let progressTime = progressBar[progressBar.length - 1].getAttribute('aria-valuenow')
  40. if (isLive[0].endDate) {
  41. let presentTime = new Date(Date.parse(isLive[0].startDate) + progressTime * 1000)
  42. let date = (presentTime).toString().split(' ')
  43. return ` (${date[3]}/${twoDigit(presentTime.getMonth() + 1)}/${date[2]} ${date[4]}) `
  44. } else return formatTime(progressTime)
  45. } else return ''
  46. }
  47.  
  48. let main = () => {
  49. let liveClock = getClock()
  50. let progressBar = document.querySelector('.ytp-progress-bar')
  51. let observer = new MutationObserver(() => { liveClock.textContent = updateTime() })
  52. observer.observe(progressBar, { attributes: true })
  53. }
  54.  
  55. document.addEventListener('yt-navigate-finish', () => { if (window.location.href.includes('/watch?v=')) main() })