跳转到内容

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

来自osm&bio
Magezeya留言 | 贡献
无编辑摘要
Magezeya留言 | 贡献
无编辑摘要
第1行: 第1行:
local p = {}
<includeonly>
<div class="biology-olympiad-countdown">
  <div class="countdown-header">
    <div class="dna-icon">🧬</div>
    <h3>全国中学生生物学联赛倒计时</h3>
  </div>
 
  <div class="countdown-content">
    <div class="countdown-text">
      距离{{{text|全国中学生生物学联赛}}}还有
    </div>
   
    <div class="countdown-timer">
      {{#if: {{{time|}}} |
        {{#switch: {{{time}}}
          | day = <span class="countdown-number">{{#expr: floor( ( {{#time: U | {{#invoke:BiologyOlympiadDates|getNextDate}} }} - {{#time: U}} ) / 86400 ) }}</span><span class="countdown-unit">天</span>
          | hour = <span class="countdown-number">{{#expr: floor( ( {{#time: U | {{#invoke:BiologyOlympiadDates|getNextDate}} }} - {{#time: U}} ) / 3600 ) }}</span><span class="countdown-unit">小时</span>
          | minute = <span class="countdown-number">{{#expr: floor( ( {{#time: U | {{#invoke:BiologyOlympiadDates|getNextDate}} }} - {{#time: U}} ) / 60 ) }}</span><span class="countdown-unit">分钟</span>
          | second = <span class="countdown-number">{{#expr: ( {{#time: U | {{#invoke:BiologyOlympiadDates|getNextDate}} }} - {{#time: U}} ) }}</span><span class="countdown-unit">秒</span>
        }}
      | <span class="countdown-number">{{#expr: floor( ( {{#time: U | {{#invoke:BiologyOlympiadDates|getNextDate}} }} - {{#time: U}} ) / 86400 ) }}</span><span class="countdown-unit">天</span>
      }}
    </div>
   
    <div class="countdown-date">
      下一届联赛日期: {{#invoke:BiologyOlympiadDates|getNextDate}}
    </div>
  </div>
 
  <div class="countdown-footer">
    <small>全国中学生生物学竞赛委员会</small>
  </div>
</div>
 
<style>
.biology-olympiad-countdown {
  background: linear-gradient(135deg, #e8f5e9 0%, #c8e6c9 100%);
  border-radius: 12px;
  padding: 20px;
  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-olympiad-countdown::before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  height: 4px;
  background: linear-gradient(90deg, #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;
}


-- 预定义的联赛日期表(2025-2035年五月的第二个星期日)
.countdown-timer {
local olympiadDates = {
  display: flex;
    "2025-05-11",
  justify-content: center;
    "2026-05-10",
  align-items: baseline;
    "2027-05-09",
  margin: 15px 0;
    "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()
.countdown-number {
    local currentTime = os.time()
  font-size: 36px;
   
  font-weight: bold;
    for i, dateStr in ipairs(olympiadDates) do
  color: #d32f2f;
        local datePattern = "(%d+)-(%d+)-(%d+)"
  margin: 0 5px;
        local year, month, day = dateStr:match(datePattern)
  animation: pulse 2s infinite;
        local olympiadTime = os.time({year = year, month = month, day = day})
}
       
 
        if olympiadTime > currentTime then
.countdown-unit {
            return dateStr
  font-size: 18px;
        end
  color: #555;
     end
  margin-left: 5px;
      
}
     -- 如果所有日期都已过去,返回最后一个日期
 
     return olympiadDates[#olympiadDates]
.countdown-date {
end
  color: #689f38;
  font-size: 14px;
  margin-top: 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-olympiad-countdown {
     padding: 15px;
     margin: 10px;
  }
 
  .countdown-number {
     font-size: 28px;
  }
 
  .countdown-header h3 {
     font-size: 16px;
  }
}
</style>
</includeonly>


return p
<noinclude>
{{documentation}}
</noinclude>

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


模板文档  [[{{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}} 创建]] [刷新]