2012-06-08 26 views
15

Cách tốt nhất để tính thời gian trôi qua kể từ (cuối cùng) nửa đêm bằng ms là gì?Cách tính ms từ nửa đêm trong Javascript

+0

[Ngày] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date) Nhận một đối tượng ngày cho (cuối cùng) nửa đêm và trừ "bây giờ" từ nó ... - Chỉ cần đơn giản toán học – Andreas

+0

@Andreas Midnight trừ từ bây giờ cho một thời gian tiêu cực;) –

+0

Cảm ơn guys! Kolnik, bạn giải pháp cũng cho một thời gian tiêu cực? – Olga

Trả lời

25

Tạo ngày mới sử dụng ngày/tháng/năm hiện tại và nhận sự khác biệt.

var now = new Date(), 
    then = new Date(
     now.getFullYear(), 
     now.getMonth(), 
     now.getDate(), 
     0,0,0), 
    diff = now.getTime() - then.getTime(); // difference in milliseconds 
+2

Bạn có thể làm điều đó dễ dàng hơn nhiều bằng cách sao chép đối tượng ngày và đặt thời gian thành 00:00:00. Câu trả lời của bạn có thể sai nếu đồng hồ đánh dấu giữa việc tạo hai ngày. – RobG

+0

Nó hoạt động sai trong trường hợp '2/365 * 100%' vì thay đổi tiết kiệm ánh sáng ban ngày – Dan

+1

@Dan: không, đối tượng Ngày sử dụng dấu thời gian không quan tâm đến DST. Thêm vào thực tế là DST thay đổi tại một số thời gian đầu vào buổi sáng nhưng không phải nửa đêm, nó là tốt –

0
var today = new Date(); 
var d = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0, 0); 

var difference = today.getTime() - d.getTime(); 
0

Giây kể từ nửa đêm chỉ đơn giản là sẽ được hiển thị thời điểm đó, nhưng thay vì sử dụng giờ: phút: giây, mọi thứ đều được quy đổi ra giây.

Tôi nghĩ rằng điều này sẽ làm điều đó:

var now = new Date();  
var hours = now.getHours()*(60*60); 
var minutes = now.getMinutes()*60; 
var seconds = now.getSeconds(); 

var secSinceMidnight = hours+minutes+seconds; 
+1

điều này là sai vào giờ tiết kiệm ánh sáng ban ngày – Mala

+0

@Mala bạn có nghĩa là mã này không thành công nếu điều chỉnh tiết kiệm ánh sáng ban ngày được áp dụng nửa đêm mới nhất? Sau đó câu trả lời của Andrew D. cũng không thành công – Dan

+0

@Dan: câu trả lời này giả định rằng 8 giờ sáng nghĩa là 8 giờ kể từ nửa đêm, điều này không đúng vào những ngày khi tiết kiệm ban ngày bắt đầu hoặc kết thúc. Tôi đã không xem xét kỹ câu trả lời của Andrew, nhưng trong bất kỳ trường hợp nào tôi đã đề xuất câu trả lời của RobG ở trên, bởi vì tôi có thể xác nhận rằng nó hoạt động và không bị ảnh hưởng bởi một dấu đồng hồ tiềm năng giữa hai tờ khai Ngày – Mala

1
var d=new Date(); 
// offset from midnight in Greenwich timezone 
var msFromMidnightInGMT=d%86400000; 
// offset from midnight in locale timezone 
var msFromMidnightLocale=(d.getTime()-d.getTimezoneOffset()*60000)%86400000; 
24

Một loạt các câu trả lời như vậy ở đây khác:

var d = new Date(), e = new Date(d); 
var msSinceMidnight = e - d.setHours(0,0,0,0); 

Là một chức năng:

function getMsSinceMidnight(d) { 
    var e = new Date(d); 
    return d - e.setHours(0,0,0,0); 
} 

alert(getMsSinceMidnight(new Date())); 
+1

. Nó xử lý chính xác thời gian tiết kiệm ánh sáng ban ngày. – Mala

3

đơn giản để viết , nếu bạn không nhớ tạo hai ngày.

var msSinceMidnight= new Date()-new Date().setHours(0,0,0,0); 
10

Nhiều câu trả lời trừ RobG's (recommended answer), Kolink'sLai's là sai ở đây

Hãy nhìn gần nhau hơn


sai lầm đầu tiên

OptimusCrimeAndrew D. câu trả lời:

Mala sugested, nếu điều chỉnh tiết kiệm ánh sáng ban ngày được áp dụng nửa đêm gần nhất, chúng tôi nhận được giá trị không chính xác. Hãy debug:

  1. Giả sử đó là chủ nhật cuối cùng của tháng
  2. Hiện là cố định lúc 2 giờ sáng.
  3. Nếu chúng ta nhìn thấy 10:00 trên đồng hồ, có thực sự là 11 giờ trôi qua từ nửa đêm
  4. Nhưng thay vào đó, chúng tôi đếm 10 * 60 * 60 * 1000 ms
  5. Bí quyết được chơi khi nửa đêm xảy ra tại tiểu bang DST khác nhau sau đó hiện

thứ hai sai lầm

kennebeck's câu trả lời:

Như RobG đã viết, đồng hồ có thể đánh dấu nếu bạn nhận được thời gian hệ thống hai lần. Chúng tôi thậm chí có thể xuất hiện vào những ngày khác nhau đôi khi.Bạn có thể tái sản xuất này trong một vòng lặp:

for (var i = 0; true; i++) { 
    if ((new Date()).getTime() - (new Date()).getTime()) { 
     alert(i); // console.log(i); // for me it's about a 1000 
     break; 
    } 
} 

Thứ ba là cạm bẫy cá nhân của tôi bạn có thể trải nghiệm

Xét đoạn mã sau:

var d = new Date(), 
    msSinceMidnight = d - d.setHours(0,0,0,0); 

msSinceMidnight luôn 0 là như đối tượng được thay đổi trong quá trình tính toán trước khi thao tác với chất nền


Cuối cùng, mã này hoạt động:

var d = new Date(), 
    msSinceMidnight = d.getTime() - d.setHours(0,0,0,0); 
Các vấn đề liên quan