获取当前时间并与数组进行比较

时间:2015-01-13 14:06:43

标签: javascript jquery html css angularjs

我想获取当前时间并将其与数组进行比较

HTML:

  

<div ng:app ng:controller="Scoper"> <p> Now Playing:</p> {{nowPlaying}} <br /> <p> Current Time:</p> {{currentTime | date:'HH:mm'}} </div>

Angular.js:

function Scoper($scope) {

  var days = [
    { id: 0 , time:'08:00', channel: 'Gaming'},
    { id: 0 , time:'08:30', channel: 'MUSIC'},
    { id: 0 , time:'09:00', channel: 'Bob the Builder'},
    { id: 0 , time:'09:30', channel: 'Power puff girls'},
    { id: 0 , time:'10:00', channel: 'Spongbob'},
    ];
    /*Get Current time */

     $scope.currentTime = new Date();

    if(days.time === currentTime){
        $scope.nowPlaying= days.channel;
     }
}

注意:我知道我的问题来自于我两次比较的时间,但我该怎么做?

Sample on Fiddle

3 个答案:

答案 0 :(得分:3)

这是完整的代码

HTML

<div ng-app>
  <h2>Todo</h2>
  <div ng-controller="Scoper">
    <p> Now Playing:</p>
      {{nowPlaying}}
      <br />
      <p> Current Time:</p>
      {{currentTime | date:'HH:mm'}} 

  </div>
</div>

的JScript

function Scoper($scope) {
  var days = [
    { id: 0 , time:'20:20', channel: 'Gaming'},
    { id: 0 , time:'20:18', channel: 'MUSIC'},
    { id: 0 , time:'20:22', channel: 'Bob the Builder'},
      { id: 0 , time:'20:16', channel: 'Power puff girls'},
    { id: 0 , time:'20:18', channel: 'Spongbob'},
    ];
    /*Get Current time */
var currentTime = new Date()
var hours = currentTime.getHours()
var minutes = (currentTime.getMinutes() < 10? '0' : '') + currentTime.getMinutes();
var nowTime = hours + ":" + minutes;

     $scope.currentTime = nowTime;
      for (var i = 0; i < days.length; i++) {
    if(days[i].time ==  nowTime){
        $scope.nowPlaying= days[i].channel;
        break;    
     }
      else{
       $scope.nowPlaying= "Nothing";
      }
}
}

JSFiddle Sample

答案 1 :(得分:0)

根据我的理解,你想比较格式化的字符串,而不是过滤days数组。

这可以这样做:

var day = days.filter(
  function(e) { 
    if(e.time === $scope.currentTime.getHours() + ":" + $scope.currentTime.getMinutes()) 
      { return e}; 
    });
if(day.length > 0){
  $scope.eee = day[0].channel;
}

我更新了你的小提琴:http://jsfiddle.net/ow48k6aa/它对我有用。

但是我认为你真正想要的是,获得Current HH:mm是否在08:00 - 08:30的Timespan中,你呢?

你可以做到这一点fiddle

var day = days.filter(
  function(e) {
    var t = e.time.split(":");
    var minutes = parseInt(t[0])*60 + parseInt(t[1]);
    var currMinutes = $scope.currentTime.getHours() * 60 + $scope.currentTime.getMinutes();   

    if(currMinutes < minutes)           
    { return e}; 
    });
if(day.length > 0){
  $scope.eee = day[0].channel;
}

请注意!以上只有在days-array按时间排序时才有效!否则需要修改。

答案 2 :(得分:0)

另一种纯粹的JS替代方案来解析你的时间。如果您将时间保存为12小时格式,则可以使用en-US,如果是24小时格式,则可以使用de-DE。

$scope.currentTime = new Date().toLocaleTimeString('en-US', {
hour: '2-digit',
minute: '2-digit'
}).replace(/\./g, '/');

有了这个,您可以使用现有的比较。 您也可以根据您是否希望拥有整个日期进行扩展。 只需使用toLocaleDateString。

有关javascript时间的更多信息here