Bangumi Show Watching Days

首页显示在看条目的已看天数,收藏页面显示条目的已看天数和完成天数,先去“在看”页面或Timeline获取时间方可正常使用,开始看的时间可以修改和保存

  1. // ==UserScript==
  2. // @name Bangumi Show Watching Days
  3. // @namespace https://github.com/bangumi/scripts/liaune
  4. // @version 0.4.2
  5. // @description 首页显示在看条目的已看天数,收藏页面显示条目的已看天数和完成天数,先去“在看”页面或Timeline获取时间方可正常使用,开始看的时间可以修改和保存
  6. // @author Liaune
  7. // @include /^https?://(bangumi\.tv|bgm\.tv|chii\.in)\/\S+\/(list|timeline)\/?.*
  8. // @include /^https?://(bangumi\.tv|bgm\.tv|chii\.in)\/$
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13.  
  14. let You=document.querySelectorAll('#headerNeue2 .idBadgerNeue a.avatar')[0].href.split('/user/')[1];
  15. let User =window.location.href.match(/\/list\/(\S+)\//)? window.location.href.match(/\/list\/(\S+)\//)[1]: null;
  16. //在首页显示已看天数
  17. if($('#prgSubjectList')){
  18. let watchlist = document.querySelectorAll('#prgSubjectList li.clearit');
  19. watchlist.forEach( (elem, index) => {
  20. let ID_w=elem.querySelector('a.title').href.split('/subject/')[1];
  21. if(localStorage.getItem(You+'Time_do'+ID_w)){
  22. let date = new Date(localStorage.getItem(You+'Time_do'+ID_w));
  23. let now = new Date();
  24. let durtime = parseInt((now.getTime() - date.getTime())/(24 * 60 * 60 * 1000));
  25. let showdurtime = document.createElement('span');
  26. showdurtime.className = 'tip_j';
  27. showdurtime.innerHTML = " (已看"+ durtime +"天) ";
  28. showdurtime.style.color='blue';
  29. if(durtime>=100) showdurtime.style.color='red';
  30. elem.append(showdurtime);
  31. }
  32. });
  33. }
  34.  
  35. //去timeline获取时间
  36. function Record(){
  37. User = window.location.href.match(/user\/(\S+)\/timeline/)[1];
  38. let tml_ulList = document.querySelectorAll('#timeline ul');
  39. tml_ulList.forEach( (elem, index) => {
  40. let tml_itemsList = elem.querySelectorAll('li');
  41. tml_itemsList.forEach( (elem1, index1) => {
  42. let info = elem1.querySelector('span.info_full');
  43. if(info.textContent.match(/在看|在听|在玩|在读/)){
  44. let a_list = elem1.querySelectorAll('a.l');
  45. a_list.forEach( (elem2, index2) => {
  46. let ID = elem2.href.split('/subject/')[1];
  47. let time = document.querySelectorAll('#timeline h4')[index].textContent;
  48. if(time.match(/\d{4}/) && !localStorage.getItem(User+'Time_do'+ID)) localStorage.setItem(User+'Time_do'+ID,time);
  49. });
  50. }
  51. if(info.textContent.match(/看过|听过|玩过|读过/)){
  52. let time = document.querySelectorAll('#timeline h4')[index];
  53. let a_list = elem1.querySelectorAll('a.l');
  54. a_list.forEach( (elem2, index2) => {
  55. let ID = elem2.href.split('/subject/')[1];
  56. let time = document.querySelectorAll('#timeline h4')[index].textContent;
  57. if(time.match(/\d{4}/) && !localStorage.getItem(User+'Time_finish'+ID)) localStorage.setItem(User+'Time_finish'+ID,time);
  58. });
  59. }
  60. });
  61. });
  62. }
  63.  
  64. if($('#tmlContent')){
  65. const showBtn = document.createElement('a');
  66. showBtn.addEventListener('click', Record);
  67. showBtn.className = 'chiiBtn';
  68. showBtn.href='javascript:;';
  69. showBtn.textContent = '记录时间';
  70. $("#submitBtnO").append(showBtn);
  71.  
  72. }
  73. //在收藏页面获取和显示已看天数和完成天数
  74. if($('#browserItemList li.item')){
  75. let itemsList = document.querySelectorAll('#browserItemList li.item');
  76. itemsList.forEach( (elem, index) => {
  77. let href = elem.querySelector('a.subjectCover').href;
  78. let ID = href.split('/subject/')[1];
  79. if(window.location.href.match(/\/list\/(\S+)\/do|on_hold/)){
  80. let subject_class = window.location.href.match(/https?:\/\/(bangumi\.tv|bgm\.tv|chii\.in)\/(\S+)\/list/)[2];
  81. let class_subj = subject_class=='anime'? '看':(subject_class=='book'?'读':(subject_class=='music'?'听':(subject_class=='game'?'玩':'看')));
  82. let Time_do = elem.querySelector('.inner .collectInfo span.tip_j')? elem.querySelector('.inner .collectInfo span.tip_j').innerHTML: null;
  83. if(Time_do && !localStorage.getItem(User+'Time_do'+ID))
  84. localStorage.setItem(User+'Time_do'+ID,Time_do);
  85.  
  86. let showstarttime = document.createElement('span');
  87. showstarttime.className = 'tip';
  88. showstarttime.contentEditable = true;
  89. showstarttime.textContent = localStorage.getItem(User+'Time_do'+ID);
  90. elem.querySelector('.inner .collectInfo').insertBefore(showstarttime,elem.querySelector('.inner .collectInfo span.tip_j'));
  91.  
  92. let date = new Date(localStorage.getItem(User+'Time_do'+ID));
  93. let date1 = new Date(Time_do);
  94. let now = new Date();
  95. let durtime = parseInt((now.getTime() - date.getTime())/(24 * 60 * 60 * 1000));
  96. let waittime = parseInt((now.getTime() - date1.getTime())/(24 * 60 * 60 * 1000));
  97. let showdurtime = document.createElement('span');
  98. showdurtime.className = 'tip_j';
  99. showdurtime.innerHTML = " (已"+class_subj+ durtime +"天) ";
  100. showdurtime.style.color='#0058ff';
  101. if(durtime>=100) showdurtime.style.color='red';
  102. $(showdurtime).insertAfter(showstarttime);
  103. $('<span class="tip_j">—</span>').insertAfter(showdurtime);
  104.  
  105. let showwaittime = document.createElement('span');
  106. showwaittime.className = 'tip_j';
  107. showwaittime.innerHTML = " ("+ waittime +"天没"+class_subj+") ";
  108. showwaittime.style.color='#c0690c';
  109. if(waittime>=30) showwaittime.style.color='red';
  110. elem.querySelector('.inner .collectInfo').insertBefore(showwaittime,elem.querySelector('.inner .collectInfo span.tip_i'));
  111.  
  112. showstarttime.addEventListener('blur', function (){
  113. localStorage.setItem(User+'Time_do'+ID,showstarttime.textContent);
  114. date = new Date(localStorage.getItem(User+'Time_do'+ID));
  115. durtime = parseInt((now.getTime() - date.getTime())/(24 * 60 * 60 * 1000));
  116. showdurtime.innerHTML = " (已"+class_subj+durtime +"天) ";
  117. if(durtime>=100) showdurtime.style.color='red';
  118. });
  119.  
  120. }
  121. else if(window.location.href.match(/\/list\/(\S+)\/collect/)){
  122. let Time_finish = elem.querySelector('.inner .collectInfo span.tip_j')? elem.querySelector('.inner .collectInfo span.tip_j'): null;
  123. if(Time_finish && !localStorage.getItem(User+'Time_finish'+ID)) localStorage.setItem(User+'Time_finish'+ID,Time_finish.textContent);
  124. Time_finish.contentEditable = true;
  125. Time_finish.textContent = localStorage.getItem(User+'Time_finish'+ID);
  126. let Time_do = localStorage.getItem(User+'Time_do'+ID);
  127. let showstarttime = document.createElement('span');
  128. showstarttime.className = 'tip';
  129. showstarttime.contentEditable = true;
  130. showstarttime.textContent = Time_do ? Time_do:'';
  131. elem.querySelector('.inner .collectInfo').insertBefore(showstarttime,elem.querySelector('.inner .collectInfo span.tip_j'));
  132. $('<span class="tip_j">—</span>').insertAfter(showstarttime);
  133. let date = new Date(Time_finish.textContent);
  134. let date0 = Time_do ? new Date(Time_do): null;
  135. let durtime = date0 ? parseInt((date.getTime() - date0.getTime())/(24 * 60 * 60 * 1000)): null;
  136.  
  137. let showdurtime = document.createElement('span');
  138. showdurtime.className = 'tip_j';
  139. if(durtime) showdurtime.innerHTML = " (历时"+ durtime +"天) ";
  140. showdurtime.style.color='#0058ff';
  141. if(durtime>=100) showdurtime.style.color='red';
  142. elem.querySelector('.inner .collectInfo').insertBefore(showdurtime,elem.querySelector('.inner .collectInfo span.tip_i'));
  143. showstarttime.addEventListener('blur', function (){
  144. if(showstarttime.textContent.match(/\d{4}/)){
  145. localStorage.setItem(User+'Time_do'+ID,showstarttime.textContent);
  146. date0 = new Date(localStorage.getItem(User+'Time_do'+ID));
  147. durtime = parseInt((date.getTime() - date0.getTime())/(24 * 60 * 60 * 1000));
  148. showdurtime.innerHTML = " (历时"+ durtime +"天) ";
  149. if(durtime>=100) showdurtime.style.color='red';
  150. }
  151. else if(showstarttime.textContent!='') alert("错误的时间格式");
  152.  
  153. });
  154. Time_finish.addEventListener('blur', function (){
  155. if(Time_finish.textContent.match(/\d{4}/)){
  156. localStorage.setItem(User+'Time_finish'+ID,Time_finish.textContent);
  157. date = new Date(localStorage.getItem(User+'Time_finish'+ID));
  158. durtime = parseInt((date.getTime() - date0.getTime())/(24 * 60 * 60 * 1000));
  159. showdurtime.innerHTML = " (历时"+ durtime +"天) ";
  160. if(durtime>=100) showdurtime.style.color='red';
  161. }
  162. else if(Time_finish.textContent!='') alert("错误的时间格式");
  163.  
  164. });
  165. }
  166. });
  167. }
  168. })();

QingJ © 2025

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