Nhận chênh lệch múi giờ giữa hai ngày tính bằng giây


149

Tôi đang cố gắng để có được sự khác biệt giữa hai ngày trong vài giây. Logic sẽ như thế này:

  • thiết lập một ngày ban đầu sẽ là bây giờ;
  • đặt ngày cuối cùng sẽ là ngày ban đầu cộng với một số giây trong tương lai (ví dụ: 15)
  • nhận được sự khác biệt giữa hai (số lượng giây)

Lý do tại sao tôi thực hiện nó với ngày bởi vì ngày / giờ cuối cùng phụ thuộc vào một số biến khác và nó không bao giờ giống nhau (nó phụ thuộc vào tốc độ của người dùng làm gì đó) và tôi cũng lưu trữ ngày ban đầu cho những thứ khác.

Tôi đã thử một cái gì đó như thế này:

var _initial = new Date(),
    _initial = _initial.setDate(_initial.getDate()),
    _final = new Date(_initial);
    _final = _final.setDate(_final.getDate() + 15 / 1000 * 60);

var dif = Math.round((_final - _initial) / (1000 * 60));

Điều này là tôi không bao giờ có được sự khác biệt đúng. Tôi đã cố gắng phân chia theo 24 * 60đó sẽ để lại cho tôi vài giây, nhưng tôi không bao giờ hiểu đúng. Vậy nó có gì sai với logic của tôi? Tôi có thể đang mắc một số sai lầm ngu ngốc vì nó khá muộn, nhưng điều đó làm phiền tôi rằng tôi không thể làm cho nó hoạt động được :)


2
Thứ tự các hoạt động là chìa khóa.
Dylan Cross

1
Vì vậy, bạn muốn có dấu thời gian, thêm 15 giây và sau đó xem sự khác biệt trong giây. Tôi muốn nói tỷ lệ cược cao là sự khác biệt sẽ là .... chờ cho nó .... 15 giây?
adeneo


1
Tôi thực sự hiểu những gì bạn đang cố gắng làm (tôi nghĩ), nhưng nếu bạn lấy Ngày mới (), đó là thời gian unix ngay bây giờ, hãy thêm 15 giây và ngay lập tức kiểm tra sự khác biệt, sự khác biệt sẽ là 15 giây (trừ đi một phần nghìn giây để tính toán), nhưng tôi đoán ý định của bạn là so sánh điều này trong tương lai bằng cách nào đó.
adeneo

1
Tôi thực sự không hiểu điều đó, để chứng minh quan điểm của mình, đây là một FIDDLE hoạt động cho ví dụ trên của bạn. Nếu bạn đang cố gắng tìm hiểu xem người dùng mất bao lâu để làm một việc gì đó, bạn thường nhận được dấu thời gian khi người dùng bắt đầu thao tác và dấu thời gian khi người dùng kết thúc thao tác và so sánh những điều đó và bạn biết mất bao lâu . 15 giây là cái quái gì vậy?
adeneo

Câu trả lời:


283

Mật mã

var startDate = new Date();
// Do your operations
var endDate   = new Date();
var seconds = (endDate.getTime() - startDate.getTime()) / 1000;

Hoặc thậm chí đơn giản hơn (endDate - startDate) / 1000như được chỉ ra trong các bình luận trừ khi bạn đang sử dụng bản in.


Lời giải thích

Bạn cần gọi getTime()phương thức cho các Dateđối tượng, sau đó chỉ cần trừ chúng và chia cho 1000 (vì ban đầu tính bằng mili giây). Ngoài ra, khi bạn gọi getDate()phương thức, trên thực tế, bạn nhận được ngày trong tháng dưới dạng số nguyên trong khoảng từ 1 đến 31 (không dựa trên số 0) trái ngược với thời gian kỷ nguyên bạn nhận được từ việc gọi getTime()phương thức, đại diện cho số mili giây kể từ ngày 1 tháng 1 năm 1970, 00:00


Rant

Tùy thuộc vào hoạt động liên quan đến ngày của bạn là gì, bạn có thể muốn đầu tư vào việc tích hợp một thư viện như date.js hoặc khoảnh khắc , điều này giúp nhà phát triển dễ dàng hơn nhiều , nhưng đó chỉ là vấn đề sở thích cá nhân.

Ví dụ: trong khoảnh khắc.js chúng ta sẽ làm điều moment1.diff(moment2, "seconds")đó thật đẹp.


Tài liệu hữu ích cho câu trả lời này


14
Không cần getTIme , các Ngày có thể được trừ vào nhau vì toán tử - sẽ ép buộc chúng thành Số.
RobG

3
getTime là cần thiết nếu bạn sử dụng bản thảo, nó không cho phép hoạt động số học giữa các phần tử khác với bất kỳ, số hoặc enum
zaffaste

Bạn có thể sử dụng .valueOf(), đó là những gì người -vận hành sẽ gọi trong mọi trường hợp ...
Khỉ Heretic

1
Làm thế nào nếu chúng ta cần sự khác biệt thời gian giờ / phút ...? Tôi nên chia nó bằng 60 hay bội số của nó ...? @Juan
gumuruh

Vui lòng thêm các nghi ngờ mới dưới dạng các câu hỏi riêng lẻ, nhưng vì câu hỏi này có thể sẽ bị đóng dưới dạng trùng lặp, hãy xem tại đây stackoverflow.com/questions/1322732/ Lỗi
Juan Cortés

5

Bạn có thể sử dụng new Date().getTime()để có được dấu thời gian. Sau đó, bạn có thể tính toán sự khác biệt giữa kết thúc và bắt đầu và cuối cùng biến đổi dấu thời gian được msđưa vào s.

const start = new Date().getTime();
const end = new Date().getTime();

const diff = end - start;
const seconds = Math.floor(diff / 1000 % 60);

4
<script type="text/javascript">
var _initial = '2015-05-21T10:17:28.593Z';
var fromTime = new Date(_initial);
var toTime = new Date();

var differenceTravel = toTime.getTime() - fromTime.getTime();
var seconds = Math.floor((differenceTravel) / (1000));
document.write('+ seconds +');
</script>

1

Mã dưới đây sẽ cho sự khác biệt thời gian trong giây.

var date1 = new Date(); // current date
var date2 = new Date("06/26/2018"); // mm/dd/yyyy format
var timeDiff = Math.abs(date2.getTime() - date1.getTime()); // in miliseconds
var timeDiffInSecond = Math.ceil(timeDiff / 1000); // in second

alert(timeDiffInSecond );

0

hãy thử sử dụng các chức năng chuyên dụng từ các ngôn ngữ lập trình cấp cao. .getSeconds();Phù hợp với JavaScript ở đây:

var specifiedTime = new Date("November 02, 2017 06:00:00");
var specifiedTimeSeconds = specifiedTime.getSeconds(); 

var currentTime = new Date();
var currentTimeSeconds = currentTime.getSeconds(); 

alert(specifiedTimeSeconds-currentTimeSeconds);

0

chênh lệch thời gian giữa bây giờ và 10 phút sau bằng cách sử dụng khoảnh khắc

let start_time = moment().format('YYYY-MM-DD HH:mm:ss');
let next_time = moment().add(10, 'm').format('YYYY-MM-DD HH:mm:ss');

let diff_milliseconds = Date.parse(next_time) - Date.parse(star_time);
let diff_seconds = diff_milliseconds * 1000;
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.