PageSourceSearch

https://www.bjxxg.cn/static/bjxxg_features.js

js bjxxg.cn collected 2026-10-06 13:15:15 UTC 12,249 bytes, 124 lines download raw bytes

1/* 北京信息港便民功能 */
2(function(){
3"use strict";
4
5/* ====== 农历/黄历计算 ====== */
6var lunarInfo=[0x04bd8,0x04ae0,0x0a570,0x054d5,0x0d260,0x0d950,0x16554,0x056a0,0x09ad0,0x055d2,0x04ae0,0x0a5b6,0x0a4d0,0x0d250,0x1d255,0x0b540,0x0d6a0,0x0ada2,0x095b0,0x14977,0x04970,0x0a4b0,0x0b4b5,0x06a50,0x06d40,0x1ab54,0x02b60,0x09570,0x052f2,0x04970,0x06566,0x0d4a0,0x0ea50,0x06e95,0x05ad0,0x02b60,0x186e3,0x092e0,0x1c8d7,0x0c950,0x0d4a0,0x1d8a6,0x0b550,0x056a0,0x1a5b4,0x025d0,0x092d0,0x0d2b2,0x0a950,0x0b557,0x06ca0,0x0b550,0x15355,0x04da0,0x0a5b0,0x14573,0x052b0,0x0a9a8,0x0e950,0x06aa0,0x0aea6,0x0ab50,0x04b60,0x0aae4,0x0a570,0x05260,0x0f263,0x0d950,0x05b57,0x056a0,0x096d0,0x04dd5,0x04ad0,0x0a4d0,0x0d4d4,0x0d250,0x0d558,0x0b540,0x0b6a0,0x195a6,0x095b0,0x049b0,0x0a974,0x0a4b0,0x0b27a,0x06a50,0x06d40,0x0af46,0x0ab60,0x09570,0x04af5,0x04970,0x064b0,0x074a3,0x0ea50,0x06b58,0x05ac0,0x0ab60,0x096d5,0x092e0,0x0c960,0x0d954,0x0d4a0,0x0da50,0x07552,0x056a0,0x0abb7,0x025d0,0x092d0,0x0cab5,0x0a950,0x0b4a0,0x0baa4,0x0ad50,0x055d9,0x04ba0,0x0a5b0,0x15176,0x052b0,0x0a930,0x07954,0x06aa0,0x0ad50,0x05b52,0x04b60,0x0a6e6,0x0a4e0,0x0d260,0x0ea65,0x0d530,0x05aa0,0x076a3,0x096d0,0x04afb,0x04ad0,0x0a4d0,0x1d0b6,0x0d250,0x0d520,0x0dd45,0x0b5a0,0x056d0,0x055b2,0x049b0,0x0a577,0x0a4b0,0x0aa50,0x1b255,0x06d20,0x0ada0,0x14b63,0x09370,0x049f8,0x04970,0x064b0,0x168a6,0x0ea50,0x06aa0,0x1a6c4,0x0aae0,0x092e0,0x0d2e3,0x0c960,0x0d557,0x0d4a0,0x0da50,0x05d55,0x056a0,0x0a6d0,0x055d4,0x052d0,0x0a9b8,0x0a950,0x0b4a0,0x0b6a6,0x0ad50,0x055a0,0x0aba4,0x0a5b0,0x052b0,0x0b273,0x06930,0x07337,0x06aa0,0x0ad50,0x14b55,0x04b60,0x0a570,0x054e4,0x0d160,0x0e968,0x0d520,0x0daa0,0x16aa6,0x056d0,0x04ae0,0x0a9d4,0x0a4d0,0x0d150,0x0f252,0x0d520];
7var Gan=["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"];
8var Zhi=["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"];
9var monthCN=["正","二","三","四","五","六","七","八","九","十","冬","腊"];
10function lYearDays(y){var i,sum=348;for(i=0x8000;i>0x8;i>>=1)sum+=(lunarInfo[y-1900]&i)?1:0;return sum+leapDays(y);}
11function leapMonth(y){return lunarInfo[y-1900]&0xf;}
12function leapDays(y){if(leapMonth(y))return(lunarInfo[y-1900]&0x10000)?30:29;return 0;}
13function monthDays(y,m){return(lunarInfo[y-1900]&(0x10000>>m))?30:29;}
14function solar2lunar(y,m,d){
15  var offset=(Date.UTC(y,m-1,d)-Date.UTC(1900,0,31))/86400000;
16  var i,temp=0,lunarY;
17  for(i=1900;i<2101&&offset>0;i++){temp=lYearDays(i);offset-=temp;}
18  if(offset<0){offset+=temp;i--;}
19  lunarY=i;
20  var leap=leapMonth(i),isLeap=false,lunarM,lunarD;
21  for(i=1;i<13&&offset>0;i++){
22    if(leap>0&&i==(leap+1)&&!isLeap){--i;isLeap=true;temp=leapDays(lunarY);}
23    else{temp=monthDays(lunarY,i);}
24    if(isLeap&&i==(leap+1))isLeap=false;
25    offset-=temp;
26  }
27  if(offset==0&&leap>0&&i==leap+1)if(!isLeap){isLeap=true;--i;}
28  if(offset<0){offset+=temp;--i;}
29  lunarM=i;lunarD=offset+1;
30  var gzY=Gan[(lunarY-4)%10]+Zhi[(lunarY-4)%12];
31  var mIdx=(y-1900)*12+m-1+1;
32  var gzM=Gan[mIdx%10]+Zhi[mIdx%12];
33  var dOff=Math.floor((Date.UTC(y,m-1,d)-Date.UTC(1900,0,6))/86400000);
34  var gzD=Gan[dOff%10]+Zhi[dOff%12];
35  var mCN=(isLeap?"闰":"")+monthCN[lunarM-1];
36  var dCN=(lunarD<11?"初":"")+(lunarD==10?"十":lunarD<20?nStr1[lunarD%10]:lunarD==20?"二十":lunarD<30?("廿"+nStr1[lunarD%10]):"三十");
37  if(lunarD==10)dCN="初十";if(lunarD==20)dCN="二十";if(lunarD==30)dCN="三十";
38  return{lYear:lunarY,lMonth:lunarM,lDay:lunarD,gzYear:gzY,gzMonth:gzM,gzDay:gzD,monthCN:mCN,dayCN:dCN,isLeap:isLeap};
39}
40var nStr1=["日","一","二","三","四","五","六","七","八","九","十"];
41var yiList=["祈福","开光","出行","动土","安床","纳畜","入殓","破土","安葬","祭祀","求嗣","嫁娶","纳采","修造","移徙","入宅","开市","交易","立券","挂匾","栽种","解除","会友","求医","治病","上梁","竖柱","盖屋","作灶","开仓"];
42var jiList=["诉讼","出行","安葬","修造","动土","针灸","嫁娶","移徙","入宅","开市","安床","伐木","上梁","纳畜","破土","启攒","安门","放水","开仓","祭祀","祈福","栽种","词讼","探病","赴任","经络"];
43function getYiJi(d){var seed=(d.getFullYear()*10000+d.getMonth()*100+d.getDate())%100;var yi=[],ji=[];for(var i=0;i<4;i++)yi.push(yiList[(seed+i*7)%yiList.length]);for(var i=0;i<4;i++)ji.push(jiList[(seed+i*5)%jiList.length]);return{yi:yi,ji:ji};}
44
45function initLunar(){
46  var el=document.getElementById('bjxxg-lunar');if(!el)return;
47  var now=new Date();var y=now.getFullYear(),m=now.getMonth()+1,d=now.getDate();
48  var weekDay=["日","一","二","三","四","五","六"][now.getDay()];
49  var lunar=solar2lunar(y,m,d);var yj=getYiJi(now);
50  el.innerHTML='<div style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid #C8102E">📅 黄历万年历</div>'+
51    '<div style="font-size:15px;font-weight:600;color:#333;margin-bottom:6px">'+y+'年'+m+'月'+d+'日 星期'+weekDay+'</div>'+
52    '<div style="font-size:13px;color:#666;margin-bottom:10px;line-height:1.6">农历 '+lunar.monthCN+'月'+lunar.dayCN+' '+lunar.gzYear+'年</div>'+
53    '<div style="font-size:13px;margin-bottom:4px;line-height:1.8"><span style="color:#C8102E;font-weight:600">宜:'+yj.yi.join(' ')+'</span></div>'+
54    '<div style="font-size:13px;margin-bottom:4px;line-height:1.8"><span style="color:#999">忌:'+yj.ji.join(' ')+'</span></div>';
55}
56
57function initWeather(){
58  var el=document.getElementById('bjxxg-weather');if(!el)return;
59  el.innerHTML='<div style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid #C8102E">🌤️ 北京天气</div><div style="color:#999;font-size:13px;padding:20px 0">加载中...</div>';
60  var xhr=new XMLHttpRequest();
61  xhr.open('GET','https://wttr.in/Beijing?format=j1&lang=zh',true);xhr.timeout=8000;
62  xhr.onload=function(){
63    try{var data=JSON.parse(xhr.responseText);var cur=data.current_condition[0];
64      var temp=cur.temp_C,desc=cur.lang_zh&&cur.lang_zh[0]?cur.lang_zh[0].value:cur.weatherDesc[0].value;
65      var wind=cur.windspeedKmph,humidity=cur.humidity;
66      var html='<div style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid #C8102E">🌤️ 北京天气</div>';
67      html+='<div style="font-size:14px;color:#333;margin-bottom:6px"><span style="font-size:28px;font-weight:700;color:#C8102E;margin-right:8px;display:inline-block">'+temp+'°C</span> '+desc+'</div>';
68      html+='<div style="font-size:13px;color:#666;margin-bottom:8px">💨 风速'+wind+'km/h | 💧 湿度'+humidity+'%</div>';
69      if(data.weather&&data.weather.length>1){
70        html+='<div style="font-size:12px;color:#999;margin-top:8px">';
71        for(var i=1;i<Math.min(3,data.weather.length);i++){var w=data.weather[i];
72          var fDesc=w.hourly&&w.hourly[4]&&w.hourly[4].lang_zh&&w.hourly[4].lang_zh[0]?w.hourly[4].lang_zh[0].value:'--';
73          html+='<span style="display:inline-block;margin-right:15px;padding:2px 6px;background:#f5f5f5;border-radius:4px">'+w.date.substr(5)+' '+fDesc+' '+w.mintempC+'~'+w.maxtempC+'°C</span>';
74        }html+='</div>';
75      }el.innerHTML=html;
76    }catch(e){el.innerHTML='<div style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid #C8102E">🌤️ 北京天气</div><div style="font-size:14px;color:#333;margin-bottom:6px">暂时无法获取天气</div>';}
77  };
78  xhr.onerror=xhr.ontimeout=function(){el.innerHTML='<div style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid #C8102E">🌤️ 北京天气</div><div style="font-size:14px;color:#333;margin-bottom:6px">暂时无法获取天气</div>';};
79  xhr.send();
80}
81
82function initTrafficLimit(){
83  var el=document.getElementById('bjxxg-traffic');if(!el)return;
84  var now=new Date();var dow=now.getDay();
85  if(dow==0||dow==6){el.innerHTML='<div style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid #C8102E">🚗 今日限行</div><div style="font-size:18px;color:#52c41a;font-weight:600;padding:15px 0">今日不限行(周末)</div>';return;}
86  var baseDate=new Date(2024,3,1);var diffDays=Math.floor((now-baseDate)/(86400000));var diffWeeks=Math.floor(diffDays/7);
87  var rotation=Math.floor(diffWeeks/13)%5;
88  var limits=[[['5','0'],['1','6'],['2','7'],['3','8'],['4','9']],[['4','9'],['5','0'],['1','6'],['2','7'],['3','8']],[['3','8'],['4','9'],['5','0'],['1','6'],['2','7']],[['2','7'],['3','8'],['4','9'],['5','0'],['1','6']],[['1','6'],['2','7'],['3','8'],['4','9'],['5','0']]];
89  var todayLimit=limits[rotation][dow-1];var y=now.getFullYear(),m=now.getMonth()+1,d=now.getDate();
90  el.innerHTML='<div style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid #C8102E">🚗 今日限行</div>'+
91    '<div style="font-size:13px;color:#666;margin-bottom:8px">'+y+'/'+m+'/'+d+'</div>'+
92    '<div style="font-size:15px;color:#333;margin-bottom:6px;line-height:1.6">限行尾号:<span style="font-size:32px;font-weight:700;color:#C8102E;margin:0 4px;display:inline-block">'+todayLimit[0]+'</span> 和 <span style="font-size:32px;font-weight:700;color:#C8102E;margin:0 4px;display:inline-block">'+todayLimit[1]+'</span></div>'+
93    '<div style="font-size:12px;color:#999">限行时间:7:00-20:00 五环内</div>'+    '<div style="margin-top:10px;padding:9px 10px;background:#fff2f0;border:1px solid #ffccc7;border-radius:6px;color:#a8071a;font-size:12px;line-height:1.7">致歉:此前限行尾号曾因轮换数据维护不及时出现错误ï¼
93Œç»™æ‚¨å‡ºè¡Œåˆ¤æ–­é€ æˆå½±å“ï¼Œæˆ‘们深表歉意。请以北京交管部门最新公告为准,我们也将持续人工复核更新。</div>';
94}
95
96function initHotline(){
97  var el=document.getElementById('bjxxg-hotline');if(!el)return;
98  var item='display:inline-flex;align-items:center;justify-content:space-between;width:calc(50% - 6px);padding:6px 8px;background:#fafafa;border-radius:6px;box-sizing:border-box';
99  el.innerHTML='<div style="font-size:16px;font-weight:700;color:#333;margin-bottom:12px;padding-bottom:8px;border-bottom:2px solid #C8102E">📞 便民电话</div>'+
100    '<div style="display:flex;flex-wrap:wrap;gap:8px">'+
101    '<div style="'+item+'"><span style="font-size:13px;color:#666">市民热线</span><a href="tel:12345" style="font-size:14px;font-weight:600;color:#C8102E;text-decoration:none">12345</a></div>'+
102    '<div style="'+item+'"><span style="font-size:13px;color:#666">急救中心</span><a href="tel:120" style="font-size:14px;font-weight:600;color:#C8102E;text-decoration:none">120</a></div>'+
103    '<div style="'+item+'"><span style="font-size:13px;color:#666">火警报警</span><a href="tel:119" style="font-size:14px;font-weight:600;color:#C8102E;text-decoration:none">119</a></div>'+
104    '<div style="'+item+'"><span style="font-size:13px;color:#666">交通事故</span><a href="tel:122" style="font-size:14px;font-weight:600;color:#C8102E;text-decoration:none">122</a></div>'+
105    '<div style="'+item+'"><span style="font-size:13px;color:#666">消费投诉</span><a href="tel:12315" style="font-size:14px;font-weight:600;color:#C8102E;text-decoration:none">12315</a></div>'+
106    '</div>';
107}
108
109var moreLink='<div style="margin-top:10px;text-align:right"><a href="URL" style="font-size:13px;color:#C8102E;text-decoration:none">LABEL →</a></div>';
110function addLinks(){
111  var map={lunar:['/tools/calendar.html','查看详情'],weather:['/tools/weather.html','查看详情'],traffic:['/tools/traffic.html','查看详情'],hotline:['/tools/hotline.html','查看更多']};
112  for(var k in map){
113    var el=document.getElementById('bjxxg-'+k);
114    if(el){
115      el.innerHTML+=moreLink.replace('URL',map[k][0]).replace('LABEL',map[k][1]);
116      el.style.cursor='pointer';
117      (function(url){el.addEventListener('click',function(e){if(e.target.tagName!=='A')window.location.href=url;});})(map[k]);
118    }
119  }
120}
121function init(){initLunar();initWeather();initTrafficLimit();initHotline();setTimeout(addLinks,500);}
122if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',init);}
123else{init();}
124})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.