Làm thế nào để bạn có được dấu thời gian trong JavaScript?


4015

Làm cách nào tôi có thể có dấu thời gian trong JavaScript?

Một cái gì đó tương tự như dấu thời gian Unix , nghĩa là, một số duy nhất đại diện cho thời gian và ngày hiện tại. Hoặc là một số hoặc một chuỗi.


Làm cách nào để có dấu thời gian 64 bit trong JS?
Alexander Mills

@AlexanderMills Vì JavaScript không hỗ trợ số nguyên 64 bit, bạn sẽ phải nhận hai số nguyên 32 bit. Hỏi một câu hỏi khác.
wizzwizz4

Câu trả lời:


4914

Ngắn & Snazzy:

+ new Date()

Một toán tử đơn nguyên như pluskích hoạt valueOfphương thức trong Dateđối tượng và nó trả về dấu thời gian (không có bất kỳ thay đổi nào).

Chi tiết:

Trên hầu hết tất cả các trình duyệt hiện tại, bạn có thể sử dụng Date.now()để lấy dấu thời gian UTC tính bằng mili giây ; một ngoại lệ đáng chú ý là IE8 trở về trước (xem bảng tương thích ).

Bạn có thể dễ dàng thực hiện một shim cho điều này, mặc dù:

if (!Date.now) {
    Date.now = function() { return new Date().getTime(); }
}

Để lấy dấu thời gian tính bằng giây , bạn có thể sử dụng:

Math.floor(Date.now() / 1000)

Hoặc cách khác, bạn có thể sử dụng:

Date.now() / 1000 | 0

Mà nên nhanh hơn một chút, nhưng cũng ít đọc hơn (cũng xem câu trả lời này ).

Tôi sẽ khuyên bạn nên sử dụng Date.now()(với shim tương thích). Nó tốt hơn một chút vì nó ngắn hơn & không tạo ra một Dateđối tượng mới . Tuy nhiên, nếu bạn không muốn tương thích tối đa và tối đa, bạn có thể sử dụng phương pháp "cũ" để lấy dấu thời gian tính bằng mili giây :

new Date().getTime()

Mà sau đó bạn có thể chuyển đổi thành giây như thế này:

Math.round(new Date().getTime()/1000)

Và bạn cũng có thể sử dụng valueOfphương pháp mà chúng tôi đã trình bày ở trên:

new Date().valueOf()

Dấu thời gian tính bằng mili giây

var timeStampInMs = window.performance && window.performance.now && window.performance.timing && window.performance.timing.navigationStart ? window.performance.now() + window.performance.timing.navigationStart : Date.now();

console.log(timeStampInMs, Date.now());


11
Một ngoại lệ đáng chú ý khác là node.js. Tôi đến đây từ Google đang tìm cách làm điều tương tự trong nút
Milan Babuškov

57
Sẽ không Date.now() / 1000 | 0bị ảnh hưởng từ những năm 2038 vấn đề Năm ? new Date('Jan 1, 2039') / 1000 | 0 == -2117514496
gengkev

3
hoặc thậm chí, sử dụng Math.floor ..~~(Date.now() / 1000)
Matej

14
@ MilanBabuškov nhưng node.js không hỗ trợDate.now()
OrangeDog

51
Mặc dù +new Datathông minh, nó không thể đọc được bởi các nhà phát triển khác. Date.now()rõ ràng hơn và đảm bảo mọi người khác biết những gì đang xảy ra.
Harry Sadler

514

Tôi thích điều này, vì nó nhỏ:

+new Date

Tôi cũng thích điều này, vì nó chỉ ngắn và tương thích với các trình duyệt hiện đại và hơn 500 người đã bình chọn rằng nó tốt hơn:

Date.now()

636
Tùy chọn này là một ý tưởng tồi. Nó dễ dàng bị bỏ qua, trông giống như một lỗi đánh máy và trong thực tế dựa vào hiệu ứng phụ của ngôn ngữ. Tôi thấy mã xấu.
inanutshellus

10
@Billy Khi tôi nhớ lại, tôi đã tính dấu thời gian trong hai giải pháp được đề xuất mỗi lần 1M và tính thời gian chạy trung bình. Tôi đã chạy nó trong Firefox và Chrome, với getTime nhanh hơn trong cả hai trình duyệt. Điều đó nói rằng, ngay cả khi nó chậm hơn (một chút) tôi sẽ chọn new Date().getTime(). May mắn cho tôi, giải pháp nhanh hơn đã là giải pháp rõ ràng!
inanutshellus

11
Đồng ý với @ FabrícioMatté. Hành vi của người vận hành đơn nhất có thể không thô sơ, nhưng nếu bạn không theo dõi nó, đừng hy vọng có thể hoạt động hiệu quả trong nhiều nhóm.
Jason T Featheringham

9
@Niklaus Đó là vì bạn đang nối nó với một chuỗi khác. Trong trường hợp đó, new Date().toString()được gọi.
kirb

7
Vì tò mò người +vận hành đang làm gì để biến nó thành một chuỗi?
zadubz

276

JavaScript hoạt động với số mili giây kể từ kỷ nguyên trong khi hầu hết các ngôn ngữ khác hoạt động với giây. Bạn có thể làm việc với mili giây nhưng ngay khi bạn vượt qua một giá trị để nói PHP, các hàm riêng của PHP có thể sẽ thất bại. Vì vậy, để chắc chắn tôi luôn sử dụng giây, không phải mili giây.

Điều này sẽ cung cấp cho bạn dấu thời gian Unix (tính bằng giây):

var unix = Math.round(+new Date()/1000);

Điều này sẽ cung cấp cho bạn một phần nghìn giây kể từ epoch (không phải dấu thời gian Unix):

var milliseconds = new Date().getTime();

4
PHP sẽ hoạt động tốt với mili giây, vì nó sử dụng chính chúng với hàm microtime ().
Nico Burns

5
Mặc dù microtime () có mặt, hầu hết các hàm liên quan đến thời gian trong php dự kiến ​​dấu thời gian sẽ tính bằng giây và không tính bằng mili giây. Thêm nữa là microtime () trả về một số float (nếu bạn chuyển đúng) trong đó phần thập phân là phân số của một giây (chính xác đến micro giây), trong khi newDate (). GetTime () trả về một int trong đó nó chỉ đếm một phần nghìn giây kể từ kỷ nguyên. Ví dụ: (php) nếu bạn gọi sàn (microtime (đúng)) thì điều này sẽ có hiệu quả tương tự như thời gian gọi () tính bằng giây và không phải là micro hoặc mili giây. Chia 1000 như trên là giải pháp dễ nhất cho việc này.
gregghz

49
Thay vì tròn, sử dụng sàn. 700 ms vẫn chưa hoàn toàn thứ hai
Anagmate

Unix timestampvs Seconds since the Epoch. Không phải hai cái này có nghĩa là giống nhau sao?
Mudiaga Ejenavi

147
var time = Date.now || function() {
  return +new Date;
};

time();

6
Tại sao | | nhà điều hành? Có phải Date.now () không khả dụng trên tất cả các trình duyệt?
Chris Noe

67
Date.now () là từ JavaScript 1.5 và không được hỗ trợ trên IE 8.
Søren Løvborg

9
Các công cụ chưa được cập nhật để hỗ trợ phương thức Date.now có thể hoạt động xung quanh sự vắng mặt của nó bằng cách sử dụng shim sau: if (! Date.now) {Date.now = function now () {return + (Ngày mới); }; }
Per Quested Aronsson

hoặc(Date.now||function(){return +new Date})();

130

Tôi cung cấp nhiều giải pháp với các mô tả trong câu trả lời này. Vui lòng đặt câu hỏi nếu bất cứ điều gì không rõ ràng
PS: thật đáng buồn khi ai đó đã hợp nhất điều này với câu trả lời hàng đầu mà không cung cấp tín dụng.


Giải pháp nhanh và bẩn:

Date.now() /1000 |0

Cảnh báo : nó có thể bị hỏng vào năm 2038 và trả về số âm nếu bạn thực hiện |0phép thuật. Sử dụng Math.floor()thay thế vào thời điểm đó

Math.floor() giải pháp:

Math.floor(Date.now() /1000);

Một số thay thế kỳ lạ của Derek 朕 會 功夫 được lấy từ các bình luận bên dưới câu trả lời này:

new Date/1e3|0

Polyfill để có được Date.now()làm việc:

Để làm cho nó hoạt động trong IE, bạn có thể làm điều này (Polyfill từ MDN ):

if (!Date.now) {
    Date.now = function now() {
        return new Date().getTime();
    };
}

Nếu bạn không quan tâm đến thời gian tiết kiệm năm / ngày trong tuần / ngày, bạn có thể loại bỏ nó và sử dụng nó sau năm 2038:

var now = (function () {
    var year = new Date(new Date().getFullYear().toString()).getTime();
    return function () {
        return Date.now() - year
    }
})();

Một số đầu ra trông như thế nào:

new Date()
Thu Oct 29 2015 08:46:30 GMT+0100 (Mitteleuropäische Zeit )
new Date(now())
Thu Oct 29 1970 09:46:30 GMT+0100 (Mitteleuropäische Zeit )

Tất nhiên nó sẽ phá vỡ thời gian tiết kiệm ánh sáng ban ngày, nhưng tùy thuộc vào những gì bạn đang xây dựng, điều này có thể hữu ích cho bạn nếu bạn cần thực hiện các thao tác nhị phân trên dấu thời gian sau khi int32 sẽ phá vỡ vào năm 2038.

Điều này cũng sẽ trả về giá trị âm nhưng chỉ khi người dùng của PC mà bạn đang chạy mã của bạn đang thay đổi đồng hồ PC của họ ít nhất là đến ngày 31 tháng 12 của năm trước.


Nếu bạn chỉ muốn biết thời gian tương đối kể từ thời điểm mã được chạy qua trước tiên, bạn có thể sử dụng một cái gì đó như thế này:

var relativeTime = (function () {
    var start = Date.now();
    return function () {
        return Date.now() - start
    }
})();

Trong trường hợp bạn đang sử dụng jQuery, bạn có thể sử dụng $.now()như được mô tả trong Tài liệu của jQuery, điều này làm cho polyfill trở nên lỗi thời vì $.now()bên trong cũng làm điều tương tự:(new Date).getTime()

Nếu bạn hài lòng về phiên bản của jQuery, hãy cân nhắc việc nâng cao câu trả lời này vì tôi không tự mình tìm thấy nó.


Bây giờ một lời giải thích nhỏ về những gì |0không:

Bằng cách cung cấp |, bạn bảo người phiên dịch thực hiện thao tác HOẶC nhị phân. Các phép toán bit yêu cầu số tuyệt đối biến kết quả thập phân từ Date.now() / 1000thành một số nguyên.

Trong quá trình chuyển đổi đó, số thập phân được loại bỏ, dẫn đến kết quả tương tự như sử dụng Math.floor()nhưng sử dụng ít mã hơn.

Mặc dù được cảnh báo: nó sẽ chuyển đổi gấp đôi 64 bit thành số nguyên 32 bit. Điều này sẽ dẫn đến mất thông tin khi xử lý số lượng lớn. Dấu thời gian sẽ bị hỏng sau năm 2038 do tràn số nguyên 32 bit.


Để biết thêm thông tin về việc Date.nowtheo liên kết này: Date.now()@ MDN


12
| 0 tương tự như Math.floor () vì nó là một hoạt động bit (không hoạt động với float). thông thường nó thậm chí còn nhanh hơn Math.floor () vì nó không phải là một hàm gọi, nó là một toán tử javascript gốc.
GottZ


@Christophe tại sao bạn nghĩ vậy? Vì sửa lỗi IE? ngoại trừ phần đó tôi nghĩ khá đơn giản và có thể tùy chỉnh.
GottZ

5
polyfills / shims không phức tạp. Chúng là kết quả của việc phải hỗ trợ 9 phiên bản trình duyệt khác nhau và ngành công nghiệp quyết định chọn tiêu chuẩn nào chúng áp dụng và chúng chỉ tạo nên.
rlemon

8
Để tham khảo nhỏ gọn nhất bạn có thể nhận được là new Date/1e3|0.
Derek 朕 會

88
var timestamp = Number(new Date()); // current time as number

61

jQuery cung cấp phương thức riêng để lấy dấu thời gian:

var timestamp = $.now();

(bên cạnh đó nó chỉ thực hiện (new Date).getTime()biểu thức)

REF: http://api.jquery.com/jQuery.now/


2
jQuery cũng sẽ giải quyết mọi vấn đề tương thích giữa các trình duyệt với các API JavaScript khác nhau.
Henry Heleine

4
@VisioN Tôi đã tìm cách để thực hiện dấu thời gian trong Node.js. Tôi đã tìm thấy một câu hỏi javascript trong stackoverflow và tôi nhận được câu trả lời trong jQuery, điều này không có ích. Javascript và jQuery là hai thứ. Nếu chúng tôi đưa ra câu trả lời cho mọi khung javascript ngoài kia, chúng tôi sẽ kết thúc với số lượng câu trả lời có thể vô hạn, điều này trái với triết lý của Q / A trong stackoverflow. Ngoài ra: i.stack.imgur.com/Ledgt.gif : D
Pierre Arlaud

5
@VisioN Ai nói javascript cần được sử dụng trong trình duyệt?
Pierre Arlaud

5
@PierreArlaud Và ai nói rằng câu hỏi này chỉ nói về NodeJS?
VisioN

2
@KingRider Không cần thiết parseInt, vì giá trị kết quả sẽ luôn là a Number.
VisioN

46

console.log(new Date().valueOf()); // returns the number of milliseconds since the epoch


4
Điều này tương đương +new Date.. :)
19h

8
chỉ cần làmDate.now()
Orlando

@Orlando thấy câu trả lời khác, vấn đề với bây giờ () là hỗ trợ trình duyệt
Christophe

@Christophe chỉ cần thực hiện một polyfill đơn giản, developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
Orlando

4
@Orlando chính xác, không chỉ làm Date.now ()
Christophe

43

Ngoài các tùy chọn khác, nếu bạn muốn có ISO dạng định dạng, bạn có thể lấy trực tiếp

console.log(new Date().toISOString());


Nó không trả về một số nguyên với câu hỏi được yêu cầu!
alexventuraio

@AlexVentura với ISO dateformat chuỗi, bạn có thể khởi tạo một đối tượng ngày và trừ giữa chúng. Ví dụ:new Date("2017-05-04T07:11:28.940Z") - new Date("2017-05-04T07:11:14.092Z")
Joaquinglezsantos

41

Chỉ cần thêm, đây là một hàm để trả về chuỗi dấu thời gian trong Javascript. Ví dụ: 15:06:38 chiều

function displayTime() {
    var str = "";

    var currentTime = new Date()
    var hours = currentTime.getHours()
    var minutes = currentTime.getMinutes()
    var seconds = currentTime.getSeconds()

    if (minutes < 10) {
        minutes = "0" + minutes
    }
    if (seconds < 10) {
        seconds = "0" + seconds
    }
    str += hours + ":" + minutes + ":" + seconds + " ";
    if(hours > 11){
        str += "PM"
    } else {
        str += "AM"
    }
    return str;
}

11
OP đang hỏi về dấu thời gian nguyên; đây là một chuỗi đại diện của thời gian.
Brad Koch

3
"Tương tự như dấu thời gian của Unix, nghĩa là, một con số duy nhất đại diện cho thời điểm hiện tại"
Brad Koch

Tôi đã có một mã để hiển thị thời gian nhưng các phần của Úc hiển thị ngày đầy đủ, tập lệnh này đã giúp tôi chia nhỏ và hiển thị đúng. (+1 cho điều đó)
Syfer

40

Ngày , một đối tượng gốc trong JavaScript là cách chúng ta nhận được tất cả dữ liệu về thời gian.

Chỉ cần cẩn thận trong JavaScript dấu thời gian phụ thuộc vào bộ máy khách, vì vậy nó không phải là dấu thời gian chính xác 100%. Để có kết quả tốt nhất, bạn cần lấy dấu thời gian từ phía máy chủ .

Dù sao, cách ưa thích của tôi là sử dụng vanilla. Đây là một cách phổ biến để làm điều đó trong JavaScript:

Date.now(); //return 1495255666921

Trong MDN, nó được đề cập như dưới đây:

Phương thức Date.now () trả về số mili giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970 00:00:00 UTC.
Bởi vì now () là một phương thức tĩnh của Date, nên bạn luôn sử dụng nó như Date.now ().

Nếu bạn sử dụng phiên bản dưới ES5, Date.now();không hoạt động và bạn cần sử dụng:

new Date().getTime();

29

Một cái tôi chưa thấy

Math.floor(Date.now() / 1000); // current time in seconds

Một cái khác tôi chưa thấy là

var _ = require('lodash'); // from here https://lodash.com/docs#now
_.now();

1
Date.now() /1000 |0cũng làm như vậy và đã được trả lời trước đó
GottZ 17/12/14

3
tốt. tôi chắc chắn đã chỉnh sửa Math.floor()nó nhưng chỉ để làm rõ rằng nó có tác dụng tương tự |0. tôi không muốn làm tổn thương bạn hoặc bất cứ điều gì. tôi chỉ muốn nói với bạn rằng câu trả lời của bạn theo một cách nào đó đã tồn tại. bằng cách nhìn vào tất cả các câu trả lời đã cho, có một số thông báo sàn theo một cách nào đó.
GottZ

Tôi nghĩ rằng việc nhập toàn bộ thư viện Lodash chỉ để sử dụng _.now()là hơi quá mức cần thiết. Tôi khuyên bạn chỉ nên nhập chức năng Lodash mà bạn cần sử dụng (trong trường hợp này là _.now () trên NPM ), nhưng ngay cả họ cũng không chấp nhận gói của họ vì chỉ sử dụng Date.now().
mgthomas99

27

Các Date.getTime()phương pháp có thể được sử dụng với một tinh chỉnh nhỏ:

Giá trị được trả về bởi phương thức getTime là số mili giây kể từ ngày 1 tháng 1 năm 1970 00:00:00 UTC.

Chia kết quả cho 1000 để lấy dấu thời gian Unix, floornếu cần:

(new Date).getTime() / 1000

Các Date.valueOf()phương pháp có chức năng tương đương với Date.getTime(), mà làm cho nó có thể sử dụng các toán số học trên đối tượng ngày để đạt được kết quả giống hệt nhau. Theo tôi, cách tiếp cận này ảnh hưởng đến khả năng đọc.


7
Bạn không cần dấu ngoặc đơn:new Date().getTime() / 1000
Ry-

14
Bạn không cần chúng, nhưng chúng làm cho mã dễ đọc hơn (IMHO). Tôi đoán là có vấn đề.
johndodo

Bạn thậm chí không cần ()sau new Date.getTime()kể từ đó /sẽ chuyển đối tượng Date thành một số.
Derek 朕 會

25

Math.floor(new Date().getTime() / 1000)có thể được rút ngắn thành new Date / 1E3 | 0.

Xem xét để bỏ qua việc getTime()gọi trực tiếp và sử dụng | 0như là một thay thế cho Math.floor()chức năng. Cũng cần nhớ 1E3là một từ tương đương ngắn hơn 1000(chữ hoa E được ưu tiên hơn chữ thường để chỉ 1E3là hằng số).

Kết quả là bạn nhận được như sau:

var ts = new Date / 1E3 | 0;

console.log(ts);


3
@dchest "Math.floor(new Date().getTime()/1000)".length == 37; "new Date/1E3|0".length == 14; 37 -14 = 23 byte;
Valentin Podkamennyi

@MatthieuCharbonnier Chính xác là gì không thể đọc được? Dấu hiệu phân chia, 1E3, đường ống hay không? Xin vui lòng xem đoạn mã trong câu trả lời của tôi ở trên.
Valentin Podkamennyi

1
@Valentin Bạn đang giảm thiểu / làm phức tạp mã đơn giản mà hầu như không có lợi ích. Tôi không thấy điểm để làm điều đó. Chúng tôi không có trên Code Golf!
Matthieu Charbonnier

@MatthieuCharbonnier, Không có gì phức tạp, chỉ là cú pháp và toán tử cơ bản. Điểm chính là viết mã ngắn, rõ ràng và dễ hiểu.
Valentin Podkamennyi

2
@Valentin Vui lòng giải thích cho tôi cách thay thế Math.floor()bằng cách |0làm cho mã này "rõ ràng và dễ hiểu". Giải thích cho tôi đâu là điểm để lưu 1 byte bằng cách thay thế 1000bằng 1E3. Chuyện này thật vớ vẩn. Tôi thấy mã xấu.
Matthieu Charbonnier

24

Hiệu suất

Hôm nay - 2020.04,23 tôi thực hiện các thử nghiệm cho các giải pháp được lựa chọn. Tôi đã thử nghiệm trên MacOs High Sierra 10.13.6 trên Chrome 81.0, Safari 13.1, Firefox 75.0

Kết luận

  • Giải pháp Date.now()(E) nhanh nhất trên Chrome và Safari và nhanh thứ hai trên Firefox và đây có lẽ là lựa chọn tốt nhất cho giải pháp trình duyệt chéo nhanh
  • Giải pháp performance.now()(G), điều đáng ngạc nhiên, nhanh hơn 100 lần so với các giải pháp khác trên Firefox nhưng chậm nhất trên Chrome
  • Các giải pháp C, D, F khá chậm trên tất cả các trình duyệt

nhập mô tả hình ảnh ở đây

Chi tiết

Kết quả cho chrome

nhập mô tả hình ảnh ở đây

Bạn có thể thực hiện kiểm tra trên máy của mình TẠI ĐÂY

Mã được sử dụng trong các bài kiểm tra được trình bày dưới đây đoạn trích


Tôi sẽ quan tâm nếu bạn đã thử nghiệm performance.now()vì nó được cho là chính xác nhất về mặt tem.
SamsonTheBrave

@SamsonTheBrave cảm ơn vì nhận xét của bạn - Tôi cập nhật câu trả lời
Kamil Kiełczewski

Tuyệt vời, cảm ơn bạn đã cập nhật! Tôi nhận thấy rằng bạn đang thấy sự khác biệt về hiệu suất hiện đang tăng tốc trên Firefox. Đây có thể là kết quả của Firefox, privacy.reduceTimerPrecisionlàm tròn kết quả đến mili giây gần nhất. Nó cũng được bật theo mặc định nhưng có thể bị tắt. developer.mozilla.org/en-US/docs/Web/API/Performance/now
SamsonTheBrave

22

Tôi rất khuyên bạn nên sử dụng moment.js. Để có được số mili giây kể từ thời kỳ UNIX, hãy làm

moment().valueOf()

Để có được số giây kể từ thời kỳ UNIX, hãy làm

moment().unix()

Bạn cũng có thể chuyển đổi thời gian như vậy:

moment('2015-07-12 14:59:23', 'YYYY-MM-DD HH:mm:ss').valueOf()

Tôi làm việc đó mọi lúc. Không có ý định chơi chữ.

Để sử dụng moment.jstrong trình duyệt:

<script src="moment.js"></script>
<script>
    moment().valueOf();
</script>

Để biết thêm chi tiết, bao gồm các cách cài đặt và sử dụng MomentJS khác, hãy xem tài liệu của họ


21

Đối với dấu thời gian có độ phân giải micro giây, có performance.now:

function time() { 
  return performance.now() + performance.timing.navigationStart;
}

Điều này có thể ví dụ năng suất 1436140826653.139, trong khi Date.nowchỉ cung cấp 1436140826653.


21

Bạn chỉ có thể sử dụng

    var timestamp = new Date().getTime();
    console.log(timestamp);

để có được dấu thời gian hiện tại. Không cần phải làm gì thêm.


20

Đây là một hàm đơn giản để tạo dấu thời gian theo định dạng: mm / dd / yy hh: mi: ss

function getTimeStamp() {
    var now = new Date();
    return ((now.getMonth() + 1) + '/' +
            (now.getDate()) + '/' +
             now.getFullYear() + " " +
             now.getHours() + ':' +
             ((now.getMinutes() < 10)
                 ? ("0" + now.getMinutes())
                 : (now.getMinutes())) + ':' +
             ((now.getSeconds() < 10)
                 ? ("0" + now.getSeconds())
                 : (now.getSeconds())));
}

10
@ b123400 - Đây là phiên bản Lisp : (new (chain (-date) (to-i-s-o-string))).
Inaimathi

20

// The Current Unix Timestamp
// 1443534720 seconds since Jan 01 1970. (UTC)

// seconds
console.log(Math.floor(new Date().valueOf() / 1000)); // 1443534720
console.log(Math.floor(Date.now() / 1000)); // 1443534720
console.log(Math.floor(new Date().getTime() / 1000)); // 1443534720

// milliseconds
console.log(Math.floor(new Date().valueOf())); // 1443534720087
console.log(Math.floor(Date.now())); // 1443534720087
console.log(Math.floor(new Date().getTime())); // 1443534720087

// jQuery
// seconds
console.log(Math.floor($.now() / 1000)); // 1443534720
// milliseconds
console.log($.now()); // 1443534720087
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


16

Bất kỳ trình duyệt nào không được hỗ trợ Date.now, bạn có thể sử dụng trình duyệt này để nhận thời gian ngày hiện tại:

currentTime = Date.now() || +new Date()

3
(Đọc lại nhận xét của tôi) Mã của bạn có vấn đề: nó thực thi phương thức Date.now thay vì kiểm tra hỗ trợ trước. Trên lông mày cũ, nó sẽ gây ra Date.now không phải là lỗi chức năng .
Salman A

Có lẽ một sự thay thế tốt hơn sẽ là sử dụng một toán tử ternary để khẳng định rằng Date.nowthực sự tồn tại (và là một hàm), trước khi cố gắng gọi nó : currentTime = typeof Date.now === "function" ? Date.now() : +new Date().
mgthomas99

14

Cái này có một giải pháp: chuyển đổi tem unixtime thành tim trong js thử cái này

var a = new Date(UNIX_timestamp*1000);
var hour = a.getUTCHours();
var min = a.getUTCMinutes();
var sec = a.getUTCSeconds();

14

Tôi đã học được một cách thực sự thú vị khi chuyển đổi một đối tượng Date đã cho thành dấu thời gian Unix từ mã nguồn của Cookie JQuery vào ngày khác.

Đây là một ví dụ:

var date = new Date();
var timestamp = +date;

Tôi chuẩn bị viết Đối tượng Date () mới. Bạn có thể điều khiển nhật ký (Ngày mới ()) và sau đó lướt qua các phương thức liên quan theo đối tượng / hàm Date () mới
sg28

14

Nếu muốn một cách cơ bản để tạo dấu thời gian trong Node.js thì điều này hoạt động tốt.

var time = process.hrtime();
var timestamp = Math.round( time[ 0 ] * 1e3 + time[ 1 ] / 1e6 );

Nhóm của chúng tôi đang sử dụng điều này để phá vỡ bộ đệm trong môi trường localhost. Đầu ra là /dist/css/global.css?v=245521377nơi 245521377dấu thời gian được tạo bởi hrtime().

Hy vọng điều này có ích, các phương thức trên có thể hoạt động tốt nhưng tôi thấy đây là cách tiếp cận đơn giản nhất cho nhu cầu của chúng tôi trong Node.js.


13

Điều này dường như làm việc.

console.log(clock.now);
// returns 1444356078076

console.log(clock.format(clock.now));
//returns 10/8/2015 21:02:16

console.log(clock.format(clock.now + clock.add(10, 'minutes'))); 
//returns 10/8/2015 21:08:18

var clock = {
    now:Date.now(),
    add:function (qty, units) {
            switch(units.toLowerCase()) {
                case 'weeks'   :  val = qty * 1000 * 60 * 60 * 24 * 7;  break;
                case 'days'    :  val = qty * 1000 * 60 * 60 * 24;  break;
                case 'hours'   :  val = qty * 1000 * 60 * 60;  break;
                case 'minutes' :  val = qty * 1000 * 60;  break;
                case 'seconds' :  val = qty * 1000;  break;
                default       :  val = undefined;  break;
                }
            return val;
            },
    format:function (timestamp){
            var date = new Date(timestamp);
            var year = date.getFullYear();
            var month = date.getMonth() + 1;
            var day = date.getDate();
            var hours = date.getHours();
            var minutes = "0" + date.getMinutes();
            var seconds = "0" + date.getSeconds();
            // Will display time in xx/xx/xxxx 00:00:00 format
            return formattedTime = month + '/' + 
                                day + '/' + 
                                year + ' ' + 
                                hours + ':' + 
                                minutes.substr(-2) + 
                                ':' + seconds.substr(-2);
            }
};

13

Nếu nó dành cho mục đích ghi nhật ký, bạn có thể sử dụng ISOString

new Date().toISOString()

"2019-05-18T20: 02: 36.694Z"




9

Khi viết bài này, câu trả lời hàng đầu là 9 năm và rất nhiều thứ đã thay đổi kể từ đó - không kém phần quan trọng, chúng tôi có sự hỗ trợ gần như phổ biến cho một giải pháp không hack:

Date.now()

Nếu bạn muốn hoàn toàn chắc chắn rằng điều này sẽ không bị hỏng trong một trình duyệt cổ (trước tức là 9), bạn có thể đặt nó phía sau một tấm séc, như vậy:

const currentTimestamp = (!Date.now ? +new Date() : Date.now());

Điều này sẽ trả về mili giây kể từ thời gian kỷ nguyên, tất nhiên, không phải giây.

Tài liệu MDN trên Date.now


8

cách đơn giản hơn:

var timeStamp=event.timestamp || new Date().getTime();

Không biết từ đâu eventđến. Bạn cần đưa ra một lời giải thích tốt hơn về cách bạn giải quyết nó thay vì bạn viết một câu trả lời. Xin vui lòng!
alexventuraio

Tôi chuẩn bị viết Đối tượng Date () mới. Bạn có thể điều khiển nhật ký (Ngày mới ()) và sau đó lướt qua các phương thức liên quan theo đối tượng / hàm Date () mới
sg28
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.