JS: Kiểm tra xem ngày có ít hơn 1 giờ trước không?


96

Có cách nào để kiểm tra xem một ngày cách đây ít hơn 1 giờ không?

Một cái gì đó như thế này:

<script>
// old date
var olddate = new Date("February 9, 2012, 12:15");

// current date
var currentdate = new Date();

if (olddate >= currentdate - 1 hour) {
    alert("newer than 1 hour");
else {
    alert("older than 1 hour");
}
</script>

Ngoài ra, một câu hỏi khác - có cách nào để thêm giờ vào một ngày không?

Như thế này:

<script>
var olddate = new Date("February 9, 2012, 12:15") + 15 HOURS; // output: February 10, 2012, 3:15
</script>

Câu hỏi thứ hai của bạn là một bản sao có thể có của stackoverflow.com/questions/1050720/...
Pbirkoff

Câu trả lời:


156

Định nghĩa

var ONE_HOUR = 60 * 60 * 1000; /* ms */

sau đó bạn có thể làm

((new Date) - myDate) < ONE_HOUR

Để có được một giờ kể từ một cuộc hẹn hò, hãy thử

new Date(myDate.getTime() + ONE_HOUR)                       

Điều này sẽ không chấp nhận các ngày trước giờ? (tức là một khác biệt âm)
information_interchange

1
@information_interchange, có. Nếu n giờ trước giống với -n giờ trong tương lai, thì tất cả các ngày trong tương lai đều nhỏ hơn một giờ trước.
Mike Samuel

53

Sử dụng một số cú pháp ES6:

const lessThanOneHourAgo = (date) => {
    const HOUR = 1000 * 60 * 60;
    const anHourAgo = Date.now() - HOUR;

    return date > anHourAgo;
}

Sử dụng thư viện Moment :

const lessThanOneHourAgo = (date) => {
    return moment(date).isAfter(moment().subtract(1, 'hours'));
}

Cú pháp viết tắt với Moment :

const lessThanOneHourAgo = (date) => moment(date).isAfter(moment().subtract(1, 'hours'));

Điều này cũng hoạt động với dayjs . const lessThanOneHourAgo = (date) => { return dayjs(date).isAfter(dayjs().subtract(1, 'hours')); };
turrican_34

Điều này khá gần với những gì tôi cần. mà là nhiều hơnThanXHours trước, vì vậy tôi chỉ thêm isBefore thay vì isAfter!
Urasquirrel

9

các thư viện thời điểm thực sự có thể giúp thể hiện điều này. Bí quyết là chọn ngày, thêm thời gian và xem trước hay sau bây giờ:

  lastSeenAgoLabel: function() {
    var d = this.lastLogin();
    if (! moment(d).isValid()) return 'danger';  // danger if not a date.
    if (moment(d).add(10, 'minutes').isBefore(/*now*/)) return 'danger'; // danger if older than 10 mins
    if (moment(d).add(5,  'minutes').isBefore(/*now*/)) return 'warning'; // warning if older than 5mins
    return 'success';  // Looks good!
  },

2
//for adding hours to a date
Date.prototype.addHours= function(hrs){
    this.setHours(this.getHours()+hrs);
    return this;
}

Gọi hàm như thế này:

//test alert(new Date().addHours(4));

2

Sử dụng thời điểm sẽ dễ dàng hơn nhiều trong trường hợp này, Bạn có thể thử cách này:

    let hours = moment().diff(moment(yourDateString), 'hours');

Nó sẽ cung cấp cho bạn giá trị số nguyên như 1,2,5,0etc để bạn có thể dễ dàng sử dụng kiểm tra điều kiện như:

if(hours < 1) {

Ngoài ra, một điều nữa là bạn có thể nhận được kết quả chính xác hơn của chênh lệch thời gian (theo số thập phân như 1.2,1.5,0.7etc) để có được loại kết quả bằng cách sử dụng cú pháp này:

let hours = moment().diff(moment(yourDateString), 'hours', true);

Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào khác


0

Bạn có thể thực hiện như sau:

  1. Đầu tiên tìm sự khác biệt của hai ngày, tức là tính bằng mili giây
  2. Chuyển đổi mili giây thành phút
  3. Nếu phút nhỏ hơn 60, thì điều đó có nghĩa là ngày nằm trong giờ khác không phải trong giờ.
var date = new Date("2020-07-12 11:30:10");
var now = new Date();
var diffInMS = now - date;
var msInHour = Math.floor(diffInMS/1000/60);
if (msInHour < 60) {
    console.log('Within hour');
} else {
    console.log('Not within the hour');
}

-2

// thử cái này: // để so sánh hai ngày:

<Script Language=Javascript>
function CompareDates() 
{ 
    var str1 = document.getElementById("Fromdate").value;
    var str2 = document.getElementById("Todate").value;
    var dt1  = parseInt(str1.substring(0,2),10); 
    var mon1 = parseInt(str1.substring(3,5),10);
    var yr1  = parseInt(str1.substring(6,10),10); 
    var dt2  = parseInt(str2.substring(0,2),10); 
    var mon2 = parseInt(str2.substring(3,5),10); 
    var yr2  = parseInt(str2.substring(6,10),10); 
    var date1 = new Date(yr1, mon1, dt1); 
    var date2 = new Date(yr2, mon2, dt2); 

    if(date2 < date1)
    {
        alert("To date cannot be greater than from date");
        return false; 
    } 
    else 
    { 
        alert("Submitting ...");
    } 
} 

</Script>

Hy vọng nó sẽ hoạt động 4 u ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.