为什么jQuery.countdown的该用法计算出的日期差结果错误?
问题原因与修复方案
核心错误点
- 格式化占位符使用错误:你代码中使用的
%-d是公历日期「当月的第几天」(取值范围1~31),并非两个日期之间的剩余总天数。jQuery.countdown插件中用来表示倒计时剩余总天数的占位符是%-D,这是你得到的结果偏差极大的核心原因。 - 结束日期写死固定年份:你直接写死了
2021/12/25作为结束日期,如果需要动态计算到「当年圣诞节」的倒计时,建议动态生成当前年份的圣诞节日期对象,避免跨年之后代码失效。同时传Date对象比传日期字符串更稳妥,可避免不同浏览器对日期字符串的解析差异。
修复后的代码
JavaScript部分
function doCountDown(countDownContainer, endDate) { $(countDownContainer).countdown(endDate, function(event) { $(this).html(event.strftime('<ul class="list-unstyled clock">' + '<li class="days"><span>%-D</span><span>days</span></li> ' + '<li class="hrs"><span>%H</span><span>hours</span></li> ' + '<li class="mins"><span>%M</span><span>minutes</span></li> ' + '<li class="seconds"><span>%S</span><span>seconds</span></li></ul>')); }); } // 动态生成当年圣诞节日期,月份参数从0开始,11对应12月 const currentYearChristmas = new Date(new Date().getFullYear(), 11, 25); doCountDown('#count_down', currentYearChristmas);
CSS(无修改,可保持原代码)
.clock { display: inline-flex; } .clock li { display: flex; flex-direction: column; justify-content: center; width: 58px; height: 58px; margin: 0 4px; font-weight: bold; color: #efefef; background: #343434; border-radius: 3px; } .clock li span { line-height: 1; } .clock li span:last-child { font-size: 10px; padding: 5px 0; text-transform: uppercase; }
HTML(无修改,可保持原代码)
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://cdn.rawgit.com/hilios/jQuery.countdown/2.2.0/dist/jquery.countdown.min.js"></script> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet" /> <div class="conrainer"> <div class="text-center"> <h1 class="h4 my-3">Party starts in...</h1> <div id="count_down"></div> </div> </div>
内容的提问来源于stack exchange,提问作者Razvan Zamfir
相关产品推荐
相关产品推荐

