本館粉絲專頁

使用者:Digipunk/SC/func.js:修訂版本之間的差異

分享此網頁到Facebook
分享此網頁到Plurk
分享此網頁到百度搜藏
分享此網頁到Twitter
分享此網頁到Del.icio.us
台灣棒球維基館
跳轉到: 導覽搜尋
第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 = td.innerText + '!' + __dgpk_tz_conv_do(date, td.innerText, offset);
+
         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, tm, offset) {
+
function __dgpk_tz_conv_do(date, time, offset) {
   var dd = new Date(date + ' ' + tm);
+
  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;
}