最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Check if time difference is less than 45 mins and run function - AngularJS - Stack Overflow

programmeradmin1浏览0评论

This is an easy thing to do in PHP with code like this;

if (strtotime($given_time) >= time()+300) echo "You are online";

But can't find anything on SO to do exactly this in javascript. I want to check if the difference between a given time and the current time is less than 45mins

For instance

$scope.given_time = "14:10:00"
$scope.current_time = new Date();

I'm only concerned with the time part. I need to extract time part from new Date(); and then pare.

Then this should be true

How can I achieve this with Javascript:

if ($scope.given_time - $scope.current_time < 45 minutes) {
   // do something
}

This is an easy thing to do in PHP with code like this;

if (strtotime($given_time) >= time()+300) echo "You are online";

But can't find anything on SO to do exactly this in javascript. I want to check if the difference between a given time and the current time is less than 45mins

For instance

$scope.given_time = "14:10:00"
$scope.current_time = new Date();

I'm only concerned with the time part. I need to extract time part from new Date(); and then pare.

Then this should be true

How can I achieve this with Javascript:

if ($scope.given_time - $scope.current_time < 45 minutes) {
   // do something
}
Share Improve this question edited Dec 4, 2015 at 14:49 moh_abk asked Dec 4, 2015 at 14:44 moh_abkmoh_abk 2,1648 gold badges37 silver badges65 bronze badges 4
  • 1 You can use getMinutes() for the date object. – www139 Commented Dec 4, 2015 at 14:49
  • 1 did you tried by using plugin like moment.js ? – Pankaj Parkar Commented Dec 4, 2015 at 14:49
  • 1 How often does it check for the time difference? If you used a window.setInterval and checked it every minute, you could use getMinutes() function and just pare it that way. – www139 Commented Dec 4, 2015 at 14:51
  • @www139 I do the check on every page load... – moh_abk Commented Dec 4, 2015 at 14:52
Add a ment  | 

4 Answers 4

Reset to default 3

Javascript uses unix timestamps in milliseconds, so it is similar to the output of strtotime (which uses seconds).

var date = new Date();

Then you'll need to do the calculation from milliseconds. (Minutes * 60 * 1000)

You can also use date.parse() to parse a string to milliseconds, just like strtotime() in PHP does to seconds.

In full:

var date = new Date();
var last = new Date('Previous Date'); // or a previous millisecond timestamp
if ( ( date - last ) > ( 45 * 60 * 1000 ) ) {
   // do something
}

You could use a static date to pare just time, this is exactly what strtotime does if you exclude the date:

var last = new Date('1/1/70 14:10:00');
var date = new Date('1/1/70 14:30:00');

However, this approach will fail if you're trying to pare time that cross over day boundaries.

Try this:

function checkTime(time) {
  var date = new Date();
  var date1 = new Date((date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear() + " " + time);

  var minutes = (date1.getTime() - date.getTime()) / (60 * 1000);

  if (minutes > 45 || (minutes < 0 && minutes > -1395)) { 
  // greater than 45 is todays time is above 45 minutes
  // less than 0 means the next available time will be tomorrow and the greater than -1395 means it will be more than 45 minutes from now into tomorrow

    document.write(time + ': true<br />');
  } else {
    document.write(time + ': false<br />');
  }
}

checkTime("14:10:00");
checkTime("16:30:00");
checkTime("17:10:00");

There's a JavaScript method called getMinutes(); you can use to get only the minutes and pare.

Your code should look something like:

    var received_time = "14:10:00".split(':');
    var minute = '';  
    if(received_time.length === 3) {
      minute = parseInt(received_time[1], 10);
   }
    $scope.given_time = minute;
    var the_time = new Date();
    $scope.current_time = the_time.getMinutes();

And you now can do your thing:

if ($scope.given_time - $scope.current_time < 45 minutes) {
   // do something
}

Using a library like moment.js you can simply diff the two times.

var $log = $("#log");

/* Difference between just times */
$log.append("Difference between times\n");
var givenTime = moment("14:10:00", "HH:mm:ss");
var minutesPassed = moment("14:30:00", "HH:mm:ss").diff(givenTime, "minutes");

$log.append("Minutes passed: " + minutesPassed + "\n");

if (minutesPassed < 45) {
  $log.append(minutesPassed + " minutes have elapsed. Event Triggered." + "\n");
}


/* Better: Difference between times that have dates attached to them and cross a day boundary. */
$log.append("\n\nDifference between dates with times\n");
givenTime = moment("2015-12-03 23:33:00");
minutesPassed = moment("2015-12-04 00:14:00").diff(givenTime, "minutes");

$log.append("Minutes passed: " + minutesPassed + "\n");

if (minutesPassed < 45) {
  $log.append(minutesPassed + " minutes have elapsed. Event Triggered." + "\n");
}
<script src="https://ajax.googleapis./ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://momentjs./downloads/moment.js"></script>
<p>Results:</p>
<hr>
<pre id="log"></pre>
<hr>

Caveat: If the given time is yesterday such as 11:30pm and the current time is 12:10am then you will get the wrong result. You'd want to use a date with the time if this type of thing is an issue for your use case.

The moment.js documentation

http://momentjs./docs/

Angular directive for moment documentation

https://github./urish/angular-moment/blob/master/README.md

发布评论

评论列表(0)

  1. 暂无评论