angular.module('plunker', []);


  
<!DOCTYPE html>
<html ng-app="plunker">

<head>
  <meta charset="utf-8" />
  <title>Moment / Moment TZ Demo</title>
  <link data-require="bootstrap-css@*" data-semver="3.3.1" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <link rel="stylesheet" href="style.css" />
  <script data-require="angular.js@1.4.x" src="https://code.angularjs.org/1.4.0-rc.1/angular.js" data-semver="1.4.0-rc.1"></script>
  <script data-require="moment.js@2.10.2" data-semver="2.10.2" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.2/moment.min.js"></script>
  <script data-require="moment-timezone-with-data@0.2.5" data-semver="0.2.5" src="http://momentjs.com/downloads/moment-timezone-with-data.min.js"></script>
  <script data-require="ui-bootstrap@0.13.0" data-semver="0.13.0" src="http://angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.13.0.min.js"></script>
  <script src="app.js"></script>
  <script src="filters.js"></script>
  <script src="controllers.js"></script>
  <script src="services.js"></script>
</head>

<body ng-controller="MainCtrl as vm">
  <div class='container'>
    <div class="text-center">
    <h4>Add Current Time</h4>
    <button type="submit" class="btn btn-primary" ng-click="vm.addTimeNow()">Add Time Now</button>
    </div>
    
    <hr>
    <h4 class="text-center">Select Time to Add</h4>
    <form class="form-inline" ng-submit="vm.addTime()">
      <div class="form-group">
        <label>Day</label>
        <select ng-model="vm.form.day" ng-init="vm.form.day=1" ng-options="day for day in vm.days"></select>
        <label>Month</label>
        <select ng-model="vm.form.month" ng-init="vm.form.month=1" ng-options="month for month in vm.months"></select>
        <label>Year</label>
        <select ng-model="vm.form.year" ng-init="vm.form.year=2015" ng-options="year for year in vm.years"></select>
      </div>
      <div class="form-group">
        <label>Hour</label>
        <input ng-model="vm.form.hour" ng-init="vm.form.hour=12" type="text">
        <label>Min</label>
        <input ng-model="vm.form.minute" ng-init="vm.form.minute=30" type="text">
      </div>
      <div class="form-group">
        <label>Timezone</label>
        <select ng-model="vm.form.timezone" ng-init="vm.form.timezone='UTC'" ng-options="zone for zone in vm.zones"></select>
      </div>
      <button type="submit" class="btn btn-primary">Add</button>
    </form>

    <hr>
    <h4 class="text-center">Convert Timezones Using a Filter</h4>

    <table class="table table-striped">
      <thead>
        <tr>
          <th>Input</th>
          <th>Timezones</th>
          <th>Output</th>
        </tr>
      </thead>
      <tbody>
        <tr ng-repeat="time in vm.times">
          <td>{{ time | formatTime:'MMMM Do YYYY, HH:mm Z' }}</td>
          <td>
            <select ng-model="time.timezone" ng-init="time.timezone='UTC'" ng-options="zone for zone in vm.zones"></select>
          </td>
          <td>{{ time | convertTimezone:time.timezone | formatTime:'MMMM Do YYYY, HH:mm:ss Z' }}</td>
        </tr>
      </tbody>
    </table>
  </div>
</body>

</html>
/* Put your css in here */

angular
  .module('plunker')
  .filter('formatTime', function() {
    return function(input, format) {

      // check to make sure a moment object was passed
      if (!moment.isMoment(input)) {
        // do nothing
        return input;
      } else {
        return input.format(format);
      }
    };
  });

angular
  .module('plunker')
  .filter('convertTimezone', function() {
    return function(input, timezone) {
      var output;

      // use clone to prevent side-effects
      output = input.clone().tz(timezone);

      // if the timezone was not valid, moment will not do anything, you may
      // want this to log if there was an issue
      if (moment.isMoment(output)) {
        return output;
      } else {
        // log error...    
        return input;
      }
    };
  });
angular
  .module('plunker')
  .factory('Time', function() {
    var svc = {};

    svc.getAllZones = function() {
      return moment.tz.names();
    };

    svc.getMonthsByName = function() {
      return ["January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"];
    };
    
    svc.getMonthsByNumber = function() {
      return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
    };
    
    svc.getYears = function() {
      return [2015, 2016, 2017];
    };
    
    svc.getDaysByNumber = function () {
      var days = [];
      
      for (var i = 1; i < 32; i++) {
        days.push(i);
      }
      
      return days;
    };

    return svc;
  });
angular
  .module('plunker')
  .controller('MainCtrl', function($scope, Time) {
      var vm = this;

      // form options
      vm.days = Time.getDaysByNumber();
      vm.months = Time.getMonthsByNumber();
      vm.years = Time.getYears();
      vm.zones = Time.getAllZones();

      // array of moment objects
      vm.times = [];

      // when form is submitted, push a moment object on to the vm.times object
      vm.addTimeNow = function() {
        vm.times.push(moment());
      };
      
      vm.addTime = function() {
        var obj = {
          year: Number(vm.form.year),
          // moment takes month in the format [0-11]
          month: (Number(vm.form.month))-1,
          day: Number(vm.form.day),
          hour: Number(vm.form.hour),
          minute: Number(vm.form.minute)
        };

        vm.times.push(moment.tz(obj, vm.form.timezone));
        };
        
        vm.outputApply = function () {
          $scope.$apply();
        };
      });