跳转到内容

模板:生物联赛倒计时:修订间差异

来自osm&bio
Magezeya留言 | 贡献
创建页面,内容为“<includeonly> <!-- 主容器 --> <div id="biology-contest-countdown" style="font-family: 'Segoe UI', system-ui, sans-serif; max-width: 600px; margin: 20px auto; text-align: center;"> <!-- 标题区域 --> <div style="background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); color: white; padding: 20px; border-radius: 15px 15px 0 0; box-shadow: 0 5px 15px rgba(0,0,0,0.1);"> <h1 style="margin: 0; font-size: 2.2em; text-shadow: 2px 2px 4px rgba(0,0,0,0.2);…”
 
Magezeya留言 | 贡献
无编辑摘要
 
(未显示同一用户的8个中间版本)
第1行: 第1行:
<includeonly>
<includeonly>
<!-- 主容器 -->
<div class="biology-countdown">
<div id="biology-contest-countdown" style="font-family: 'Segoe UI', system-ui, sans-serif; max-width: 600px; margin: 20px auto; text-align: center;">
  <div class="countdown-header">
 
    <div class="dna-icon">🧬</div>
<!-- 标题区域 -->
    <h3>全国中学生生物学联赛倒计时</h3>
<div style="background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); color: white; padding: 20px; border-radius: 15px 15px 0 0; box-shadow: 0 5px 15px rgba(0,0,0,0.1);">
  <h1 style="margin: 0; font-size: 2.2em; text-shadow: 2px 2px 4px rgba(0,0,0,0.2);">全国生物学竞赛倒计时</h1>
  <p style="font-size: 1.1em; opacity: 0.9; margin: 10px 0 0;">每年的五月第二个星期日</p>
</div>
 
<!-- 倒计时显示区域 -->
<div style="background: #fff; padding: 30px 20px; border-radius: 0 0 15px 15px; box-shadow: 0 5px 15px rgba(0,0,0,0.1);">
  <div id="countdown-year" style="font-size: 1.5em; color: #333; margin-bottom: 15px; font-weight: bold;">
    计算中...
   </div>
   </div>
    
    
   <div style="display: flex; justify-content: center; gap: 15px; flex-wrap: wrap;">
   <div class="countdown-content">
     <div class="countdown-box">
     <div class="countdown-text">
       <div id="countdown-days" class="countdown-number">00</div>
       距离{{#if: {{{text|}}} | {{{text}}} | 全国奥林匹克生物学联赛}}还有
      <div class="countdown-label">天</div>
     </div>
     </div>
     <div class="countdown-box">
   
       <div id="countdown-hours" class="countdown-number">00</div>
     <div class="countdown-timer">
       <div class="countdown-label">小时</div>
      <!-- 确定下一个联赛日期并计算倒计时 -->
      {{#ifexpr: {{#time:U}} < {{#time:U|2025-05-11}} |
        <!-- 使用2025年日期 -->
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2025-05-11}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2025-05-11}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2025-05-11}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: {{#time:U|2025-05-11}} - {{#time:U}}}}</span><span class="countdown-unit">秒</span>
        }}
      | {{#ifexpr: {{#time:U}} < {{#time:U|2026-05-10}} |
        <!-- 使用2026年日期 -->
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2026-05-10}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2026-05-10}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2026-05-10}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: {{#time:U|2026-05-10}} - {{#time:U}}}}</span><span class="countdown-unit">秒</span>
        }}
      | {{#ifexpr: {{#time:U}} < {{#time:U|2027-05-09}} |
        <!-- 使用2027年日期 -->
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2027-05-09}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2027-05-09}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2027-05-09}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: {{#time:U|2027-05-09}} - {{#time:U}}}}</span><span class="countdown-unit">秒</span>
        }}
       | {{#ifexpr: {{#time:U}} < {{#time:U|2028-05-14}} |
        <!-- 使用2028年日期 -->
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2028-05-14}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2028-05-14}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2028-05-14}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: {{#time:U|2028-05-14}} - {{#time:U}}}}</span><span class="countdown-unit">秒</span>
        }}
      | {{#ifexpr: {{#time:U}} < {{#time:U|2029-05-13}} |
        <!-- 使用2029年日期 -->
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2029-05-13}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2029-05-13}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2029-05-13}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: {{#time:U|2029-05-13}} - {{#time:U}}}}</span><span class="countdown-unit">秒</span>
        }}
      | {{#ifexpr: {{#time:U}} < {{#time:U|2030-05-12}} |
        <!-- 使用2030年日期 -->
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2030-05-12}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2030-05-12}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2030-05-12}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: {{#time:U|2030-05-12}} - {{#time:U}}}}</span><span class="countdown-unit">秒</span>
        }}
      | {{#ifexpr: {{#time:U}} < {{#time:U|2031-05-11}} |
        <!-- 使用2031年日期 -->
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2031-05-11}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2031-05-11}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2031-05-11}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: {{#time:U|2031-05-11}} - {{#time:U}}}}</span><span class="countdown-unit">极</span>
        }}
      | {{#ifexpr: {{#time:U}} < {{#time:U|2032-05-09}} |
        <!-- 使用2032年日期 -->
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2032-05-09}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2032-05-09}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2032-05-09}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: {{#time:U|2032-05-09}} - {{#time:U}}}}</span><span class="countdown-unit">秒</span>
        }}
      | {{#ifexpr: {{#time:U}} < {{#time:U|2033-05-08}} |
        <!-- 使用2033年日期 -->
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2033-05-08}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2033-05-08}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2033-05-08}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: {{#time:U|2033-05-08}} - {{#time:U}}}}</span><span极 class="countdown-unit">秒</span>
        }}
      | {{#ifexpr: {{#time:U}} < {{#time:U|2034-05-14}} |
        <!-- 使用2034年日期 -->
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2034-05-14}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2034-05-14}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2034-05-14}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: {{#time:U|2034-05-14}} - {{#time:U}}}}</span><span class="countdown-unit">秒</span>
        }}
      | {{#ifexpr: {{#time:U}} < {{#time:U|2035-05-13}} |
        <!-- 使用2035年日期 -->
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2035-05-13}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2035-05-13}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2035-05-13}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: {{#time:极U|2035-05-13}} - {{#time:U}}}}</span><span class="countdown-unit">秒</span>
        }}
       |
        <!-- 如果所有日期都已过去,显示2035年日期 -->
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2035-05-13}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2035-05-13}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2035-05-13}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: {{#time:U|2035-05-13}} - {{#time:U}}}}</span><span class="countdown-unit">秒</span>
        }}
      }}}}}}}}}}}}
     </div>
     </div>
     <div class="countdown-box">
   
       <div id="countdown-minutes" class="countdown-number">00</div>
     <div class="countdown-date">
      <div class="countdown-label">分钟</div>
       下一届联赛日期:
    </div>
      {{#ifexpr: {{#time:U}} < {{#time:U|2025-05-11}} | 2025-05-11 |
    <div class="countdown-box">
        {{#ifexpr: {{#time:U}} < {{#time:U|2026-05-10}} | 2026-05-10 |
      <div id="countdown-seconds" class="countdown-number">00</div>
          {{#ifexpr: {{#time:U}} < {{#time:U|2027-05-09}} | 2027-05-09 |
      <div class="countdown-label">秒</div>
            {{#ifexpr: {{#time:U}} < {{#time:U|2028-05-14}} | 2028-05-14 |
              {{#ifexpr: {{#time:U}} < {{#time:U|2029-05-13}} | 2029-05-13 |
                {{#ifexpr: {{#time:U}} < {{#time:U|2030-05-12}} | 2030-05-12 |
                  {{#ifexpr: {{#time:U}} < {{#time:U|2031-05-11}} | 2031-05-11 |
                    {{#ifexpr: {{#time:U}} < {{#time:U|2032-05-09}} | 2032-05-09 |
                      {{#ifexpr: {{#time:U}} < {{#time:U|2033-05-08}} | 2033-05-08 |
                        {{#ifexpr: {{#time:U}} < {{#time:U|2034-05-14}} | 2034-05-14 |
                          {{#ifexpr: {{#time:U}} < {{#time:U|2035-05-13}} | 2035-05-13 | 2035-05-13
                          }}
                        }}
                      }}
                    }}
                  }}
                }}
              }}
            }}
          }}
        }}
      }}
     </div>
     </div>
   </div>
   </div>
    
    
   <div id="contest-date" style="margin-top: 20px; color: #666; font-style: italic;">
   <div class="countdown-footer">
     比赛日期计算中...
     <small>全国中学生生物学竞赛委员会</small>
   </div>
   </div>
</div>
</div>


<!-- 装饰元素 -->
<style>
<div style="margin-top: 15px; display: flex; justify-content: center; gap: 10px;">
.biology-countdown {
   <span style="display: inline-block; width: 15px; height: 15px; background: #4facfe; border-radius: 50%;"></span>
  background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
   <span style="display: inline-block; width: 15px; height: 15px; background: #00f2fe; border-radius: 50%;"></span>
  border-radius: 12px;
   <span style="display: inline-block; width: 15px; height: 15px; background: #4facfe; border-radius: 50%;"></span>
  padding: 20px;
</div>
  box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
  border: 1px solid #81c784;
  font-family: 'Helvetica Neue', Arial, sans-serif;
  max-width: 400px;
  margin: 10px auto;
  text-align: center;
  position: relative;
  overflow: hidden;
}
 
.biology-countdown::before {
  content: "";
  position: absolute;
  top: 0;
   left: 0;
  right: 0;
  height: 4px;
  background: linear-gradient(90极deg, #4caf50, #8bc34a, #cddc39);
}
 
.countdown-header {
  display: flex;
   align-items: center;
  justify-content: center;
  margin-bottom: 15px;
}
 
.dna-icon {
  font-size: 28px;
  margin-right: 10px;
}
 
.countdown-header h3 {
   margin: 0;
  color: #2e7d32;
  font-size: 18px;
  font-weight: 600;
}
 
.countdown-content {
  margin: 15px 0;
}


<!-- JavaScript代码 -->
.countdown-text {
<script>
   color: #388e3c;
(function() {
   font-size: 16px;
   // 查找五月第二个星期日的函数
  margin-bottom: 10px;
  function findSecondSundayInMay(year) {
}
    // 5月1日
    var mayFirst = new Date(year, 4, 1);
    // 获取5月1日是星期几 (0是星期日, 1是星期一, ..., 6是星期六)
    var dayOfWeek = mayFirst.getDay();
    // 计算到第二个星期日的天数
    var daysToAdd = dayOfWeek === 0 ? 7 : (14 - dayOfWeek) % 7;
    // 创建第二个星期日的日期对象
    var secondSunday = new Date(year, 4, 1 + daysToAdd);
    return secondSunday;
   }
 
  // 更新倒计时显示
  function updateCountdown() {
    var now = new Date();
    var currentYear = now.getFullYear();
   
    // 查找今年的比赛日期
    var thisYearContest = findSecondSundayInMay(currentYear);
   
    // 确定下一次比赛日期
    var nextContest;
    var contestYear;
   
    if (now < thisYearContest) {
      // 今年的比赛还没进行
      nextContest = thisYearContest;
      contestYear = currentYear;
    } else {
      // 今年的比赛已过,计算明年的
      nextContest = findSecondSundayInMay(currentYear + 1);
      contestYear = currentYear + 1;
    }
   
    // 计算时间差
    var timeDiff = nextContest - now;
   
    // 计算天、小时、分钟和秒
    var days = Math.floor(timeDiff / (1000 * 60 * 60 * 24));
    var hours = Math.floor((timeDiff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
    var minutes = Math.floor((timeDiff % (1000 * 60 * 60)) / (1000 * 60));
    var seconds = Math.floor((timeDiff % (1000 * 60)) / 1000);
   
    // 更新显示
    document.getElementById('countdown-year').textContent =
      '距离' + contestYear + '年全国生物学竞赛还有';
   
    document.getElementById('countdown-days').textContent =
      days.toString().padStart(2, '0');
   
    document.getElementById('countdown-hours').textContent =
      hours.toString().padStart(2, '0');
   
    document.getElementById('countdown-minutes').textContent =
      minutes.toString().padStart(2, '0');
   
    document.getElementById('countdown-seconds').textContent =
      seconds.toString().padStart(2, '0');
   
    document.getElementById('contest-date').textContent =
      '比赛日期: ' + nextContest.getFullYear() + '年' +
      (nextContest.getMonth() + 1) + '月' +
      nextContest.getDate() + '日';
  }
 
  // 初始更新
  updateCountdown();
 
  // 每秒更新一次
  setInterval(updateCountdown, 1000);
})();
</script>


<!-- CSS样式 -->
.countdown-timer {
<style>
   display: flex;
.countdown-box {
   justify-content: center;
   background: #f8f9fa;
   align-items: baseline;
   border-radius: 10px;
   margin: 15px 0;
  padding: 15px;
   min-width: 80px;
   box-shadow: 0 3px 10px rgba(0,0,0,0.1);
}
}


.countdown-number {
.countdown-number {
   font-size: 2.5em;
   font-size: 36px;
   font-weight: bold;
   font-weight: bold;
   color: #4facfe;
   color: #d32f2f;
   text-shadow: 1px 1px 2px rgba(0,0,0,0.1);
   margin: 0 5px;
  animation: pulse 2s infinite;
}
}


.countdown-label {
.countdown-unit {
   margin-top: 5px;
   font-size: 18px;
   color: #666;
   color: #555;
   font-size: 0.9em;
   margin-left: 5px;
}
}


/* 响应式设计 */
.countdown-date {
@media (max-width: 600px) {
  color: #689f38;
   .countdown-box {
  font-size: 14px;
     min-width: 60px;
  margin-top: 10px;
     padding: 10px;
  font-style: italic;
}
 
.countdown-footer {
  border-top: 1px solid #a5d6a7;
  padding-top: 10px;
  margin-top: 15px;
}
 
.countdown-footer small {
  color: #78909c;
  font-size: 12px;
}
 
@keyframes pulse {
  0% { transform: scale(1); }
  50% { transform: scale(1.05); }
  100% { transform: scale(1); }
}
 
@media (max-width: 480px) {
   .biology-countdown {
     padding: 15px;
     margin: 10px;
   }
   }
    
    
   .countdown-number {
   .countdown-number {
     font-size: 2em;
     font-size: 28px;
  }
 
  .countdown-header h3 {
    font-size: 16px;
   }
   }
}
}
</style>
</style>
</div>
</includeonly>
</includeonly>


<noinclude>
<noinclude>
== 全国生物学竞赛倒计时模板 ==
{{documentation}}
这是一个显示全国生物学竞赛倒计时的模板,比赛日期为每年的五月第二个星期日。
 
=== 使用方法 ===
只需在任意页面插入以下代码:
<pre>
{{全国生物学竞赛倒计时}}
</pre>
 
=== 功能特点 ===
* 自动计算每年的五月第二个星期日
* 动态倒计时显示(天、小时、分钟、秒)
* 自动判断今年是否已过比赛日期,显示下一年的比赛
* 响应式设计,适配各种屏幕尺寸
* 美观的UI设计
 
[[Category:倒计时模板]]
[[Category:教育模板]]
[[Category:动态模板]]
</noinclude>
</noinclude>

2025年8月22日 (五) 12:22的最新版本


模板文档  [[{{fullurl:local p = {}

-- 预定义的联赛日期表(2025-2035年五月的第二个星期日) local olympiadDates = {

   "2025-05-11",
   "2026-05-10",
   "2027-05-09",
   "2028-05-14",
   "2029-05-13",
   "2030-05-12",
   "2031-05-11",
   "2032-05-09",
   "2033-05-08",
   "2034-05-14",
   "2035-05-13"

}

function p.getNextDate()

   local currentTime = os.time()
   
   for i, dateStr in ipairs(olympiadDates) do
       local datePattern = "(%d+)-(%d+)-(%d+)"
       local year, month, day = dateStr:match(datePattern)
       local olympiadTime = os.time({year = year, month = month, day = day})
       
       if olympiadTime > currentTime then
           return dateStr
       end
   end
   
   -- 如果所有日期都已过去,返回最后一个日期
   return olympiadDates[#olympiadDates]

end

return p|action=edit}} 创建]] [刷新]