JS 实现倒计时效果(年月日时分秒)

记录下来,下次用,避免时间华仔重复造轮子上;
实现效果:


image.png

image.png

直接上代码吧:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>倒计时</title>
</head>
<body>

<div class="timer">
    <!-- <span id="years">00</span>:
    <span id="months">00</span>:
    <span id="days">00</span>:
    <span id="hours">00</span>:
    <span id="minutes">00</span>:
    <span id="seconds">00</span> -->
</div>

<!-- 活动倒计时 -->
<div class="photoVote-times md-default" >
    <div class="photoVote-content" style="background-image:url();background-color:#ffffff;color:#333333">
        <span id="hddjs"   class="photoVote-conten-text">活动倒计时</span>
        <span id="days"    class="photoVote-time" style="background-color:#f39519;color:#ffffff">00</span><span class="photoVote-conten-unit">天</span> 
        <span id="hours"   class="photoVote-time" style="background-color:#f39519;color:#ffffff">00</span><span class="photoVote-conten-unit">时</span> 
        <span id="minutes" class="photoVote-time" style="background-color:#f39519;color:#ffffff">00</span><span class="photoVote-conten-unit">分</span> 
        <span id="seconds" class="photoVote-time" style="background-color:#f39519;color:#ffffff">00</span><span class="photoVote-conten-unit">秒</span>
    </div>
</div>
  
<script charset="UTF-8" src="js/timeCountDown.js"></script>
<script charset="UTF-8" src="js/jquery.min.js"></script>
<script type="text/javascript">
    //结束日期
    var futureDate = eval(Date.UTC(2019, 11, 27, 10, 41, 0));
    fnTimeCountDown(futureDate, obj, nowDate, function () {
      console.log('时间到了!');
      $('#hddjs').html('<span id="hddjs"   class="photoVote-conten-text">活动已结束</span>');
    });
</script>

</body>
</html>

js文件:

/* 
* 倒计时的实现
*/
var fnTimeCountDown = function (d, o, now, callback) {
    var f = {
        zero: function (n) {
            var n = parseInt(n, 10);
            if (n > 0) {
                if (n <= 9) {
                    n = "0" + n;
                }
                return String(n);
            } else {
                return "00";
            }
        },
        dv: function () {
            d = d || Date.UTC(2050, 0, 1); //如果未定义时间,则我们设定倒计时日期是2050年1月1日
            var future = new Date(d);
            var nowTime = new Date(now);
            //现在将来秒差值
            var dur = Math.round((future.getTime() - nowTime.getTime()) / 1000), pms = {
                sec: "00",
                mini: "00",
                hour: "00",
                day: "00",
                month: "00",
                year: "0"
            };
            if (dur > 0) {
                pms.sec = f.zero(dur % 60);
                pms.mini = Math.floor((dur / 60)) > 0 ? f.zero(Math.floor((dur / 60)) % 60) : "00";
                pms.hour = Math.floor((dur / 3600)) > 0 ? f.zero(Math.floor((dur / 3600)) % 24) : "00";
                //pms.day = Math.floor((dur / 86400)) > 0 ? f.zero(Math.floor((dur / 86400)) % 30) : "00";
                pms.day = Math.floor((dur / 86400)) > 0 ? f.zero(Math.floor(dur / 86400)) : "00";
                //月份,以实际平均每月秒数计算
                pms.month = Math.floor((dur / 2629744)) > 0 ? f.zero(Math.floor((dur / 2629744)) % 12) : "00";
                //年份,按回归年365天5时48分46秒算
                pms.year = Math.floor((dur / 31556926)) > 0 ? Math.floor((dur / 31556926)) : "0";
            }
            return pms;
        },
        ui: function () {
            if (o.sec) {
                o.sec.innerHTML = f.dv().sec;
            }
            if (o.mini) {
                o.mini.innerHTML = f.dv().mini;
            }
            if (o.hour) {
                o.hour.innerHTML = f.dv().hour;
            }
            if (o.day) {
                o.day.innerHTML = f.dv().day;
            }
            if (o.month) {
                o.month.innerHTML = f.dv().month;
            }
            if (o.year) {
                o.year.innerHTML = f.dv().year;
            }
            now = now + 1000;
            if (f.dv().sec == "00" && f.dv().mini == "00" && f.dv().hour == "00" && f.dv().day == "00" && f.dv().month == "00" && f.dv().year == "0") {
                if (callback) {
                    callback();
                }
            }
 
            setTimeout(f.ui, 1000);
        }
    };
    f.ui();
};

// 获取本机当前时间
    var mydate = new Date();
//  console.log(mydate.getFullYear(), parseInt(mydate.getMonth())+1, mydate.getDate(), mydate.getHours(), mydate.getMinutes(), mydate.getSeconds());
      
    // var futureDate = eval(Date.UTC(2019, 11, 30, 12, 0, 0));

    var nowDate = eval(Date.UTC(mydate.getFullYear(), parseInt(mydate.getMonth())+1, mydate.getDate(), mydate.getHours(), mydate.getMinutes(), mydate.getSeconds()));
    var obj = {
        sec: document.getElementById("seconds"),
        mini: document.getElementById("minutes"),
        hour: document.getElementById("hours"),
        day: document.getElementById("days"),
        months: document.getElementById("months"),
        years: document.getElementById("years")
    }
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,065评论 1 32
  • wiki百科对http状态码的总结很是全面,权作搬运参考 1xx 消息 这一类型的状态码,代表请求已被接受,需要继...
    城下秋草阅读 525评论 0 3
  • 他的真诚让我感动!社群里的人身体力行地传达着disc对每位社群人带来的积极影响。线上线下课程学习过程中,也深深感受...
    Anthony9阅读 411评论 1 5
  • 中国哲学的背景和精神 中国哲学产生的背景就是一个大写的“农”字。中国是个大陆国家,“四海之内”便是“天下”。跟土地...
    AndyAngel阅读 263评论 0 1
  • 人类有99%的决定,包括关于配偶、事业和住处的重要抉择,都是由各种计划而成的算法来处理,我们把这些算法成为感觉、情...
    白洲笔记阅读 1,160评论 0 0