Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
  <title>VueJS 2 Countdown</title>
</head>
<body>
  <div id="app">
   <Countdown date="October 12, 2017 12:00" inline-template>
     <div class="row">
            <div class="col-xs-6 col-sm-3">
                <p class="digit">{{ days | two_digits }}</p>
                <p class="text">Days</p>
            </div>
            <div class="col-xs-6 col-sm-3">
                <p class="digit">{{ hours | two_digits }}</p>
                <p class="text">Hours</p>
            </div>
            <div class="col-xs-6 col-sm-3">
                <p class="digit">{{ minutes | two_digits }}</p>
                <p class="text">Minutes</p>
            </div>
            <div class="col-xs-6 col-sm-3">
                <p class="digit">{{ seconds | two_digits }}</p>
                <p class="text">Seconds</p>
            </div>
        </div>
   </Countdown>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.0.1/vue.min.js"></script>
</body>
</html>
 
Vue.component('Countdown', {
    props : ['date'],
    data: function() {
        return {
            now: Math.trunc((new Date()).getTime() / 1000),
            modifiedDate: Math.trunc(Date.parse(this.date) / 1000)
        }
    },
    mounted: function() {
      var ctx = this;
        setInterval(function(){
            ctx.now = Math.trunc((new Date()).getTime() / 1000);
        },1000);
    },
    computed: {
        seconds: function() {
            return (this.modifiedDate  - this.now) % 60;
        },
        minutes:function() {
            return Math.trunc((this.modifiedDate  - this.now) / 60) % 60;
        },
        hours:function() {
            return Math.trunc((this.modifiedDate  - this.now) / 60 / 60) % 24;
        },
        days:function() {
            return Math.trunc((this.modifiedDate  - this.now) / 60 / 60 / 24);
        }
    }
})
new Vue({
    el: '#app',
})
Vue.filter('two_digits', function (value) {
    return (value.toString().length <= 1) ? "0" + value : value;
});
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers