|
|
本館粉絲專頁 |
|
|
使用者:Digipunk/SC/func.js:修訂版本之間的差異
台灣棒球維基館
小 |
小 |
||
| 第55行: | 第55行: | ||
date = yy + '/' + mat[0]; | date = yy + '/' + mat[0]; | ||
} | } | ||
| + | if (date == null) continue; | ||
var TD = tr.getElementsByClassName('time-val'); | var TD = tr.getElementsByClassName('time-val'); | ||
for (var j = 0, jj = TD.length; j < jj; j++) { | for (var j = 0, jj = TD.length; j < jj; j++) { | ||
var td = TD[j]; | var td = TD[j]; | ||
| + | var time = td.innerText.trim(); | ||
| + | |||
attr = td.getAttribute('data-str'); | attr = td.getAttribute('data-str'); | ||
if (!attr) { | if (!attr) { | ||
// do conversion | // do conversion | ||
| − | attr = | + | attr = time + '!' + __dgpk_tz_conv_do(date, time, offset); |
td.setAttribute('data-str', attr); | td.setAttribute('data-str', attr); | ||
} | } | ||
| 第92行: | 第95行: | ||
} | } | ||
| − | function __dgpk_tz_conv_do(date, | + | function __dgpk_tz_conv_do(date, time, offset) { |
| − | var dd = new Date(date + ' ' + | + | if (time.match(/^\d+:\d+/) == null) return time; |
| + | |||
| + | var dd = new Date(date + ' ' + time); | ||
var utc = dd.getTime() - 60000 * dd.getTimezoneOffset() - 1000 * offset; | var utc = dd.getTime() - 60000 * dd.getTimezoneOffset() - 1000 * offset; | ||
var nd = new Date(utc); | var nd = new Date(utc); | ||
2018年8月6日 (一) 09:34的修訂版本
//-------------------------------------------------- // SC (schedule) //-------------------------------------------------- function DGPKJS_SC() { var elmts = document.getElementsByClassName('__DGPK_TZ_BTN__'); for (var i = elmts.length - 1; i >= 0; i--) { elmts[i].addEventListener("click", __dgpk_tz_conv, false); elmts[i].title = '當地時間'; elmts[i].className = 'DGPK-tz-btn'; } } function __dgpk_tz_conv(event) { var o = event.srcElement || event.target; var p = o; var safe_cnt = 10; while ((p = p.parentNode) != null && --safe_cnt >= 0) { if (p.tagName == 'TBODY' || p.tagName == 'TABLE') { break; } } if (p.tagName != 'TBODY' && p.tagName != 'TABLE') { return false; } var attr = decodeURIComponent(o.getAttribute('data-str')).replace(/\s/g, '').split('!'); var offset = __dgpk_tz_offset(attr[0]); if (offset === false) { return false; } var yy = attr[1]; if (!yy || isNaN(yy)) { yy = (new Date()).getFullYear(); } // seems fine var ATTR = [ {c:'DGPK-tz-btn', s:'當地時間'}, {c:'DGPK-tz-btn1', s:'台灣時間'} ]; var act = (o.className.indexOf(ATTR[1].c) >= 0 ? 0 : 1); o.className = ATTR[act].c; o.title = ATTR[act].s; var date = null; for (var i = 0, ii = p.children.length; i < ii; i++) { var tr = p.children[i]; if (tr.tagName != 'TR') break; // something wrong var mat = tr.children[0].innerText.trim().match(/^\d+\/\d+/); if (mat != null) { date = yy + '/' + mat[0]; } if (date == null) continue; var TD = tr.getElementsByClassName('time-val'); for (var j = 0, jj = TD.length; j < jj; j++) { var td = TD[j]; var time = td.innerText.trim(); attr = td.getAttribute('data-str'); if (!attr) { // do conversion attr = time + '!' + __dgpk_tz_conv_do(date, time, offset); td.setAttribute('data-str', attr); } td.innerHTML = attr.split('!')[act]; } } // 好喵做到底,按一次就執行全部 var BTN = document.getElementsByClassName(ATTR[(act ^ 1)].c); BTN[0] && BTN[0].click(); // 由於會一個呼叫一個,每個只要做一次即可 } function __dgpk_tz_offset(tz) { // return tz offset in seconds if (!isNaN(tz) && tz.length <= 3) { return 3600 * (8 + parseFloat(tz)); } else { var mat = tz.match(/^UTC([\+\-])([0-9:]+)$/); if (mat == null) return false; if (mat[2].indexOf(':') > 0) { // UTC+08:00 var hm = mat[2].split(':'); return (3600 * hm[0] + 60 * hm[1]) * (mat[1] == '+' ? 1 : -1); } else if (mat[2].length == 4) { // UTC+0800 return (3600 * mat[2].substr(0, 2) + 60 * mat[2].substr(2)) * (mat[1] == '+' ? 1 : -1); } else { return false; } } } function __dgpk_tz_conv_do(date, time, offset) { if (time.match(/^\d+:\d+/) == null) return time; var dd = new Date(date + ' ' + time); var utc = dd.getTime() - 60000 * dd.getTimezoneOffset() - 1000 * offset; var nd = new Date(utc); var M = nd.getMonth() + 1; var D = nd.getDate(); var h = nd.getHours() var m = nd.getMinutes(); var ret = (h < 10 ? '0' : '') + h + ':' + (m < 10 ? '0' : '') + m; ret = '<U>' + ret + '</U>'; var ori = date.split('/'); if (M != parseInt(ori[1]) || D != parseInt(ori[2])) { ret += '<BR><SPAN STYLE="color:deeppink">' + (M < 10 ? '0' : '') + M + '/' + (D < 10 ? '0' : '') + D + '</SPAN>'; } return ret; }