displayMillisecOnTwitter

Twitter上の日時表示の場所をSnowFrakeを元にミリ秒単位の表示に修正します

  1. // ==UserScript==
  2. // @name displayMillisecOnTwitter
  3. // @namespace https://twitter.com/kymn_
  4. // @version 0.1.3
  5. // @description Twitter上の日時表示の場所をSnowFrakeを元にミリ秒単位の表示に修正します
  6. // @author keymoon
  7. // @license MIT
  8. // @supportURL https://twitter.com/kymn_
  9. // @match https://twitter.com/*
  10. // ==/UserScript==
  11. (function(){
  12. //Body子要素更新の監視(急激なページレイアウトの変化、要するにユーザーページ等他ページとの遷移)
  13. (() => {
  14. const body = document.getElementsByTagName('body')[0];
  15. const bodyobserver = new MutationObserver(records => {resetObserver()});
  16. const bodyoptions = {childList:true,subtree:false}
  17. bodyobserver.observe(body,bodyoptions)
  18.  
  19. var lastHref;
  20. var observers;
  21. //ページが更新されたらHrefが変わったか確認、変わってたらObserver張替え
  22. function resetObserver(){
  23. if(location.href === lastHref) return;
  24. lastHref = location.href;
  25. if(observers){
  26. console.dir(observers);
  27. observers.forEach(x => x.disconnect());
  28. }
  29. observers = [];
  30. console.dir("update");
  31. //タイムライン更新の監視
  32. observers.push((() => {
  33. //始めに一回オーバーライドしてあげる
  34. OverrideToolTip();
  35. const target = document.getElementById('stream-items-id');
  36. const observer = new MutationObserver(records => {OverrideToolTip()})
  37. const options = {childList: true};
  38. observer.observe(target, options);
  39. return observer;
  40. //各ツイートのツールチップの書き換え
  41. function OverrideToolTip(){
  42. $('.tweet-timestamp').each(function(index, element){
  43. var date = getDateFromSnowFrake(element.getAttribute('data-conversation-id'));
  44. if(!date)return;
  45. element.setAttribute('title',formatDate(date));
  46. })
  47. }
  48. })());
  49.  
  50. //画像ツイート更新の監視
  51. observers.push((() => {
  52. const target = document.getElementsByClassName('GalleryTweet')[0];
  53. const observer = new MutationObserver(records => {OverrideTimeStamp()})
  54. const options = {attributes: true};
  55. observer.observe(target, options);
  56. return observer;
  57. //ツイートのメタデータ部の書き換え
  58. function OverrideTimeStamp(){
  59. var timeStamp = target.getElementsByClassName('tweet-timestamp')[0];
  60. if(!timeStamp)return;
  61. var date = getDateFromSnowFrake(timeStamp.getAttribute("data-conversation-id"));
  62. if(!date)return;
  63. timeStamp.setAttribute('title',formatDate(date));
  64. }
  65. })());
  66.  
  67.  
  68. //ツイート詳細ウィンドウの開閉の監視
  69. observers.push((() => {
  70. const target = document.getElementsByClassName('PermalinkOverlay-modal')[0];
  71. const observer = new MutationObserver(records => {OverrideMetaData()})
  72. const options = {attributes: true,subtree:true};
  73. observer.observe(target, options);
  74. return observer;
  75. //ツイートのメタデータ部の書き換え
  76. function OverrideMetaData(){
  77. var tweetContainer = target.getElementsByClassName('permalink-tweet')[0];
  78. if(!tweetContainer)return;
  79. var date = getDateFromSnowFrake(tweetContainer.getAttribute("data-tweet-id"));
  80. if(!date)return;
  81. target.getElementsByClassName('metadata')[0].textContent = formatDate(date);
  82. }
  83. })());
  84.  
  85. //アカウント画面のアカウント登録日時
  86. (() => {
  87. var joinDate = document.getElementsByClassName("ProfileHeaderCard-joinDateText")[0];
  88. if(!joinDate)return;
  89. var date = getDateFromSnowFrake(document.getElementsByClassName("ProfileNav")[0].getAttribute("data-user-id"));
  90. if(!date)return;
  91. joinDate.setAttribute("title",formatDate(date))
  92. })();
  93. }
  94. })();
  95.  
  96. function getDateFromSnowFrake(ID){
  97. if(ID < 10000000000) return;
  98. var unixTime = Math.floor(parseInt(ID) / 4194304) + 1288834974657;
  99. return new Date(unixTime);
  100. }
  101. function formatDate(date){
  102. return `${date.getHours()}:${date.getMinutes().toString().padStart(2,'0')}:${date.getSeconds().toString().padStart(2,'0')}.${date.getMilliseconds().toString().padStart(3,'0')} - ${1900 + date.getYear()}年${date.getMonth() + 1}月${date.getDate()}日`
  103. }
  104. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址