跳转到内容

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

来自osm&bio
Magezeya留言 | 贡献
无编辑摘要
Magezeya留言 | 贡献
无编辑摘要
 
(未显示同一用户的3个中间版本)
第1行: 第1行:
<includeonly>
<includeonly>
<!-- 主容器 -->
<div class="biology-countdown">
<div style="font-family: 'Segoe UI', system-ui, sans-serif; max-width: 500px; margin: 20px auto; text-align: center; background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%); color: white; padding: 25px; border-radius: 15px; box-shadow: 0 5px 15px rgba(0,0,0,0.1);">
  <div class="countdown-header">
 
    <div class="dna-icon">🧬</div>
<!-- 标题 -->
     <h3>全国中学生生物学联赛倒计时</h3>
<h1 style="margin: 0 0 15px; font-size: 1.8em; text-shadow: 1px 1px 3px rgba(0,0,0,0.2);">全国生物学竞赛倒计时</h1>
<p style="margin: 0 0 20px; opacity: 0.9;">每年的五月第二个星期日</p>
 
<!-- 倒计时显示 -->
<div style="background: rgba(255,255,255,0.15); padding: 15px; border-radius: 10px; backdrop-filter: blur(5px);">
  <div style="font-size: 0.9em; margin-bottom: 10px; opacity: 0.8;">距离{{#switch: {{CURRENTYEAR}}
     {{#ifexpr: {{#time: n}} > 5 or ({{#time: n}} = 5 and {{#time: j}} > {{#switch: {{CURRENTYEAR}}
      |2024=12
      |2025=11
      |2026=10
      |2027=9
      |2028=14
      |2029=13
      |2030=12
      |#default=12
    }})}}
      |{{#expr: {{CURRENTYEAR}} + 1}}
    |{{CURRENTYEAR}}
  {{/ifexpr}}}}年联赛还有</div>
 
  <div style="font-size: 2.5em; font-weight: bold; margin: 10px 0; text-shadow: 2px 2px 4px rgba(0,0,0,0.3);">
    {{#switch: {{CURRENTYEAR}}
      {{#ifexpr: {{#time: n}} > 5 or ({{#time: n}} = 5 and {{#time: j}} > {{#switch: {{CURRENTYEAR}}
        |2024=12
        |2025=11
        |2026=10
        |2027=9
        |2028=14
        |2029=13
        |2030=12
        |#default=12
      }})}}
        |{{Countdown|{{#switch: {{#expr: {{CURRENTYEAR}} + 1}}
          |2024=2024-05-12
          |2025=2025-05-11
          |2026=2026-05-10
          |2027=2027-05-09
          |2028=2028-05-14
          |2029=2029-05-13
          |2030=2030-05-12
          |#default=2030-05-12
        }}|text=天}}
      |{{Countdown|{{#switch: {{CURRENTYEAR}}
          |2024=2024-05-12
          |2025=2025-05-11
          |2026=2026-05-10
          |2027=2027-05-09
          |2028=2028-05-14
          |2029=2029-05-13
          |2030=2030-05-12
          |#default=2030-05-12
        }}|text=天}}
    {{/ifexpr}}
   </div>
   </div>
    
    
   <div style="font-size: 0.9em; opacity: 0.8;">
   <div class="countdown-content">
     {{#switch: {{CURRENTYEAR}}
     <div class="countdown-text">
       {{#ifexpr: {{#time: n}} > 5 or ({{#time: n}} = 5 and {{#time: j}} > {{#switch: {{CURRENTYEAR}}
      距离{{#if: {{{text|}}} | {{{text}}} | 全国奥林匹克生物学联赛}}还有
        |2024=12
    </div>
        |2025=11
   
        |2026=10
    <div class="countdown-timer">
        |2027=9
      <!-- 确定下一个联赛日期并计算倒计时 -->
        |2028=14
       {{#ifexpr: {{#time:U}} < {{#time:U|2025-05-11}} |
        |2029=13
        <!-- 使用2025年日期 -->
        |2030=12
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
        |#default=12
          | 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>
        |比赛日期: {{#switch: {{#expr: {{CURRENTYEAR}} + 1}}
           | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2025-05-11}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
          |2024=2024年5月12日
           | second = <span class="countdown-number">{{#expr: {{#time:U|2025-05-11}} - {{#time:U}}}}</span><span class="countdown-unit">秒</span>
           |2025=2025年5月11日
          |2026=2026年5月10日
          |2027=2027年5月9日
           |2028=2028年5月14日
          |2029=2029年5月13日
          |2030=2030年5月12日
          |#default=2030年5月12日
         }}
         }}
       |比赛日期: {{#switch: {{CURRENTYEAR}}
       | {{#ifexpr: {{#time:U}} < {{#time:U|2026-05-10}} |
           |2024=2024年5月12日
        <!-- 使用2026年日期 -->
           |2025=2025年5月11日
        {{#switch: {{#if: {{{time|}}} | {{{time}}} | day}}
          |2026=2026年5月10日
           | day = <span class="countdown-number">{{#expr: floor(({{#time:U|2026-05-10}} - {{#time:U}})/86400)}}</span><span class="countdown-unit">天</span>
           |2027=2027年5月9日
           | hour = <span class="countdown-number">{{#expr: floor(({{#time:U|2026-05-10}} - {{#time:U}})/3600)}}</span><span class="countdown-unit">小时</span>
          |2028=2028年5月14日
           | minute = <span class="countdown-number">{{#expr: floor(({{#time:U|2026-05-10}} - {{#time:U}})/60)}}</span><span class="countdown-unit">分钟</span>
           |2029=2029年5月13日
           | second = <span class="countdown-number">{{#expr: {{#time:U|2026-05-10}} - {{#time:U}}}}</span><span class="countdown-unit">秒</span>
          |2030=2030年5月12日
          |#default=2030年5月12日
         }}
         }}
     {{/ifexpr}}
      | {{#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 class="countdown-date">
      下一届联赛日期:
      {{#ifexpr: {{#time:U}} < {{#time:U|2025-05-11}} | 2025-05-11 |
        {{#ifexpr: {{#time:U}} < {{#time:U|2026-05-10}} | 2026-05-10 |
          {{#ifexpr: {{#time:U}} < {{#time:U|2027-05-09}} | 2027-05-09 |
            {{#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 class="countdown-footer">
    <small>全国中学生生物学竞赛委员会</small>
   </div>
   </div>
</div>
</div>


<!-- 装饰元素 -->
<style>
<div style="margin-top: 20px; display: flex; justify-content: center; gap: 8px;">
.biology-countdown {
   <span style="display: inline-block; width: 12px; height: 12px; background: rgba(255,255,255,0.5); border-radius: 50%;"></span>
  background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
   <span style="display: inline-block; width: 12px; height: 12px; background: rgba(255,255,255,0.5); border-radius: 50%;"></span>
  border-radius: 12px;
   <span style="display: inline-block; width: 12px; height: 12px; background: rgba(255,255,255,0.5); border-radius: 50%;"></span>
  padding: 20px;
</div>
  box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
</div>
  border: 1px solid #81c784;
</includeonly>
  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;
}
 
.countdown-text {
  color: #388e3c;
  font-size: 16px;
  margin-bottom: 10px;
}
 
.countdown-timer {
   display: flex;
  justify-content: center;
  align-items: baseline;
  margin: 15px 0;
}
 
.countdown-number {
  font-size: 36px;
  font-weight: bold;
  color: #d32f2f;
  margin: 0 5px;
  animation: pulse 2s infinite;
}
 
.countdown-unit {
  font-size: 18px;
  color: #555;
  margin-left: 5px;
}
 
.countdown-date {
  color: #689f38;
  font-size: 14px;
  margin-top: 10px;
  font-style: italic;
}


<noinclude>
.countdown-footer {
== 全国生物学竞赛倒计时模板 ==
  border-top: 1px solid #a5d6a7;
这是一个显示全国生物学竞赛倒计时的模板,比赛日期为每年的五月第二个星期日。
  padding-top: 10px;
  margin-top: 15px;
}


=== 使用方法 ===
.countdown-footer small {
只需在任意页面插入以下代码:
  color: #78909c;
<pre>
  font-size: 12px;
{{全国生物学竞赛倒计时}}
}
</pre>


=== 功能特点 ===
@keyframes pulse {
* 使用查表法预计算2024-2030年的比赛日期
  0% { transform: scale(1); }
* 自动判断今年是否已过比赛日期,显示下一年的比赛
  50% { transform: scale(1.05); }
* 使用现有的Countdown模板显示天数
  100% { transform: scale(1); }
* 美观的UI设计
}


=== 维护说明 ===
@media (max-width: 480px) {
本模板内置了2024年至2030年的比赛日期,2030年之后需要更新模板。
  .biology-countdown {
    padding: 15px;
    margin: 10px;
  }
 
  .countdown-number {
    font-size: 28px;
  }
 
  .countdown-header h3 {
    font-size: 16px;
  }
}
</style>
</includeonly>


[[Category:倒计时模板]]
<noinclude>
[[Category:教育模板]]
{{documentation}}
</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}} 创建]] [刷新]