Psssst. TRẠI BOOTC PHÁT TRIỂN WEB 2023 sẽ bắt đầu chỉ sau vài ngày nữa. Tham gia danh sách chờ, giữ chỗ trong khóa học thuần tập kéo dài 10 tuần của tôi và tìm hiểu các nguyên tắc cơ bản, HTML, CSS, JS, Tailwind, React, Next. jsvà hơn thế nữa. ✨
Dấu thời gian UNIX là một số nguyên biểu thị số giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970
Trên các máy giống UNIX, bao gồm Linux và macOS, bạn có thể nhập
Date.now[]
10 vào thiết bị đầu cuối và lấy lại dấu thời gian UNIX$ date +%s
1524379940
Dấu thời gian hiện tại có thể được tìm nạp bằng cách gọi phương thức
Date.now[]
11 trên đối tượng Date.now[]
12Date.now[]
Bạn có thể nhận được cùng một giá trị bằng cách gọi
new Date[].getTime[]
or
new Date[].valueOf[]
Ghi chú. IE8 trở xuống không có phương thức
11 trênDate.now[]
12. Tìm kiếm một polyfill nếu bạn cần hỗ trợ IE8 trở xuống hoặc sử dụngDate.now[]
1 nếuDate.now[]
2 không được xác định [vì đó là những gì một polyfill sẽ làm]Date.now[]
Dấu thời gian trong JavaScript được biểu thị bằng mili giây
Để có được dấu thời gian được biểu thị bằng giây, hãy chuyển đổi nó bằng cách sử dụng
Math.floor[Date.now[] / 1000]
Ghi chú. một số hướng dẫn sử dụng
3, nhưng điều đó sẽ xấp xỉ với giây tiếp theo ngay cả khi giây chưa hoàn thànhDate.now[]
hoặc, ít đọc hơn
~~[Date.now[] / 1000]
Tôi đã xem hướng dẫn sử dụng
________số 8nghe có vẻ là một tuyên bố kỳ lạ, nhưng đó là mã JavaScript hoàn toàn chính xác. Toán tử một ngôi + tự động gọi phương thức
Date.now[]
4 trên bất kỳ đối tượng nào mà nó được gán, trả về dấu thời gian [tính bằng mili giây]. Vấn đề với mã này là bạn khởi tạo một đối tượng Ngày mới bị loại bỏ ngay lập tứcĐể tạo ngày từ dấu thời gian, hãy sử dụng
Date.now[]
5 nhưng đảm bảo bạn chuyển một số [một chuỗi sẽ cho bạn kết quả "ngày không hợp lệ" - nghi ngờ sử dụng Date.now[]
6] Hãy gặp một đối tượng tích hợp mới. Ngày tháng. Nó lưu trữ ngày, giờ và cung cấp các phương thức quản lý ngày/giờ
Chẳng hạn, chúng ta có thể sử dụng nó để lưu trữ thời gian tạo/sửa đổi, để đo thời gian hoặc chỉ để in ra ngày hiện tại
Để tạo một đối tượng
Date.now[]
23 mới, hãy gọi Date.now[]
24 với một trong các đối số sauDate.now[]
24Không có đối số – tạo một đối tượng
Date.now[]
23 cho ngày và giờ hiện tạiDate.now[]
6Date.now[]
27Tạo một đối tượng
Date.now[]
23 với thời gian bằng số mili giây [1/1000 giây] được truyền sau ngày 1 tháng 1 năm 1970 UTC+0Date.now[]
9Một số nguyên đại diện cho số mili giây đã trôi qua kể từ đầu năm 1970 được gọi là dấu thời gian
Đó là một đại diện số nhẹ của một ngày. Chúng tôi luôn có thể tạo một ngày từ dấu thời gian bằng cách sử dụng
Date.now[]
29 và chuyển đổi đối tượng Date.now[]
23 hiện có thành dấu thời gian bằng phương pháp new Date[].getTime[]
or
new Date[].valueOf[]
21 [xem bên dưới]Ngày trước 01. 01. 1970 có dấu thời gian âm, e. g
Date.now[]
2new Date[].getTime[]
or
new Date[].valueOf[]
22Nếu có một đối số duy nhất và đó là một chuỗi thì nó sẽ được phân tích cú pháp tự động. Thuật toán giống như cách sử dụng của
new Date[].getTime[]
or
new Date[].valueOf[]
23, chúng tôi sẽ trình bày saunew Date[].getTime[]
or
new Date[].valueOf[]
2new Date[].getTime[]
or
new Date[].valueOf[]
24Tạo ngày với các thành phần đã cho theo múi giờ địa phương. Chỉ có hai đối số đầu tiên là bắt buộc
25 phải có 4 chữ số. Để tương thích, 2 chữ số cũng được chấp nhận và coi lànew Date[].getTime[] or new Date[].valueOf[]
26, e. g.new Date[].getTime[] or new Date[].valueOf[]
27 giống nhưnew Date[].getTime[] or new Date[].valueOf[]
28 ở đây, nhưng luôn khuyến khích sử dụng 4 chữ sốnew Date[].getTime[] or new Date[].valueOf[]
- Số lượng
29 bắt đầu bằngnew Date[].getTime[] or new Date[].valueOf[]
30 [tháng 1], cho đếnDate.now[]
31 [tháng 12]Date.now[]
- Tham số
32 thực sự là ngày trong tháng, nếu không có thìDate.now[]
33 được giả địnhDate.now[]
- Nếu không có
34, chúng được giả định là bằng nhauDate.now[]
30Date.now[]
Ví dụ
Date.now[]
3Độ chính xác tối đa là 1 ms [1/1000 giây]
Date.now[]
0Có các phương thức để truy cập năm, tháng, v.v. từ đối tượng
Date.now[]
23getFullYear[]Lấy năm [4 chữ số]getMonth[]Lấy tháng, từ 0 đến 11. getDate[] Lấy ngày trong tháng, từ 1 đến 31, tên của phương thức có vẻ hơi lạ. getHours[], getMinutes[], getSeconds[], getMilliseconds[] Nhận các thành phần thời gian tương ứngKhông phải
37, mà là Date.now[]
38Date.now[]
Nhiều công cụ JavaScript triển khai một phương thức không chuẩn
Date.now[]
37. Phương pháp này không được chấp nhận. Đôi khi nó trả về năm có 2 chữ số. Xin vui lòng không bao giờ sử dụng nó. Có Date.now[]
38 cho nămNgoài ra, chúng ta có thể nhận được một ngày trong tuần
getDay[]Lấy ngày trong tuần, từDate.now[]
30 [Chủ Nhật] đến Date.now[]
02 [Thứ Bảy]. Ngày đầu tiên luôn là Chủ nhật, ở một số quốc gia thì không, nhưng không thể thay đổiTất cả các phương pháp trên trả về các thành phần liên quan đến múi giờ địa phương
Ngoài ra còn có các đối tác UTC của chúng, trả về ngày, tháng, năm, v.v. cho múi giờ UTC+0. getUTCFullYear[], getUTCMonth[], getUTCDay[]. Chỉ cần chèn
Date.now[]
03 ngay sau Date.now[]
04Nếu múi giờ địa phương của bạn bị thay đổi so với UTC, thì mã bên dưới sẽ hiển thị các giờ khác nhau
Math.floor[Date.now[] / 1000]
0Bên cạnh các phương thức đã cho, có hai phương thức đặc biệt không có biến thể UTC
dành thời gian[]Trả về dấu thời gian cho ngày – một số mili giây được truyền từ ngày 1 tháng 1 năm 1970 UTC+0
getTimezoneOffset[]Trả về chênh lệch giữa UTC và múi giờ địa phương, tính bằng phút
Math.floor[Date.now[] / 1000]
1Các phương pháp sau đây cho phép thiết lập các thành phần ngày/giờ
05Date.now[]
06Date.now[]
07Date.now[]
08Date.now[]
09Date.now[]
00Math.floor[Date.now[] / 1000]
01Math.floor[Date.now[] / 1000]
02 [đặt toàn bộ ngày theo mili giây kể từ 01. 01. 1970 UTC]Math.floor[Date.now[] / 1000]
Chẳng hạn, mọi người trong số họ ngoại trừ
Math.floor[Date.now[] / 1000]
03 đều có biến thể UTC. Math.floor[Date.now[] / 1000]
04Như chúng ta có thể thấy, một số phương thức có thể thiết lập nhiều thành phần cùng một lúc, ví dụ như
Math.floor[Date.now[] / 1000]
05. Các thành phần không được đề cập không được sửa đổiVí dụ
Date.now[]
3Tự động sửa lỗi là một tính năng rất tiện dụng của các đối tượng
Date.now[]
23. Chúng tôi có thể đặt các giá trị ngoài phạm vi và nó sẽ tự động điều chỉnhVí dụ
Date.now[]
5Các thành phần ngày nằm ngoài phạm vi được phân phối tự động
Giả sử chúng ta cần tăng ngày “28 Feb 2016” thêm 2 ngày. Có thể là “2 tháng 3” hoặc “1 tháng 3” trong trường hợp năm nhuận. Chúng ta không cần phải suy nghĩ về nó. Chỉ cần thêm 2 ngày. Đối tượng
Date.now[]
23 sẽ làm phần còn lạiDate.now[]
90Tính năng đó thường được sử dụng để lấy ngày sau một khoảng thời gian nhất định. Chẳng hạn, hãy lấy ngày cho “70 giây sau bây giờ”
Date.now[]
91Chúng tôi cũng có thể đặt giá trị bằng 0 hoặc thậm chí âm. Ví dụ
Date.now[]
92Khi một đối tượng
Date.now[]
23 được chuyển đổi thành số, nó sẽ trở thành dấu thời gian giống như new Date[].getTime[]
or
new Date[].valueOf[]
21Date.now[]
93Tác dụng phụ quan trọng. ngày có thể được trừ đi, kết quả là sự khác biệt của chúng trong ms
Điều đó có thể được sử dụng để đo thời gian
Date.now[]
94Nếu chúng ta chỉ muốn đo thời gian, chúng ta không cần đối tượng
Date.now[]
23Có một phương thức đặc biệt
Math.floor[Date.now[] / 1000]
11 trả về dấu thời gian hiện tạiVề mặt ngữ nghĩa, nó tương đương với
Math.floor[Date.now[] / 1000]
12, nhưng nó không tạo đối tượng trung gian Date.now[]
23. Vì vậy, nó nhanh hơn và không gây áp lực cho việc thu gom rácNó được sử dụng chủ yếu để thuận tiện hoặc khi hiệu suất quan trọng, chẳng hạn như trong các trò chơi bằng JavaScript hoặc các ứng dụng chuyên dụng khác
Vì vậy, điều này có lẽ là tốt hơn
Date.now[]
95Nếu chúng ta muốn có một điểm chuẩn đáng tin cậy về chức năng ngốn CPU, chúng ta nên cẩn thận
Chẳng hạn, hãy đo hai hàm tính toán sự khác biệt giữa hai ngày. cái nào nhanh hơn?
Các phép đo hiệu suất như vậy thường được gọi là "điểm chuẩn"
Date.now[]
96Hai cái này thực hiện chính xác cùng một việc, nhưng một trong số chúng sử dụng
new Date[].getTime[]
or
new Date[].valueOf[]
21 rõ ràng để lấy ngày tính bằng ms và cái còn lại dựa vào phép biến đổi ngày thành số. Kết quả của họ luôn giống nhauVì vậy, cái nào nhanh hơn?
Ý tưởng đầu tiên có thể là chạy chúng nhiều lần liên tiếp và đo chênh lệch thời gian. Đối với trường hợp của chúng tôi, các chức năng rất đơn giản, vì vậy chúng tôi phải thực hiện ít nhất 100000 lần
Hãy đo lường
Date.now[]
97Ồ. Sử dụng
Math.floor[Date.now[] / 1000]
15 nhanh hơn rất nhiều. Đó là bởi vì không có chuyển đổi loại, các công cụ sẽ tối ưu hóa dễ dàng hơn nhiềuĐược rồi, chúng tôi có một cái gì đó. Nhưng đó vẫn chưa phải là một điểm chuẩn tốt
Hãy tưởng tượng rằng tại thời điểm chạy
Math.floor[Date.now[] / 1000]
16, CPU đang làm một việc gì đó song song và nó đang lấy tài nguyên. Và đến thời điểm chạy Math.floor[Date.now[] / 1000]
17 thì công việc đó đã hoàn thànhMột kịch bản khá thực tế cho một hệ điều hành đa tiến trình hiện đại
Do đó, điểm chuẩn đầu tiên sẽ có ít tài nguyên CPU hơn điểm chuẩn thứ hai. Điều đó có thể dẫn đến kết quả sai
Để đo điểm chuẩn đáng tin cậy hơn, toàn bộ gói điểm chuẩn phải được chạy lại nhiều lần
Ví dụ, như thế này
Date.now[]
98Các công cụ JavaScript hiện đại bắt đầu chỉ áp dụng tối ưu hóa nâng cao cho “mã nóng” thực thi nhiều lần [không cần tối ưu hóa những thứ hiếm khi được thực thi]. Vì vậy, trong ví dụ trên, lần thực hiện đầu tiên không được tối ưu hóa tốt. Chúng tôi có thể muốn thêm một lần khởi động
Date.now[]
99Hãy cẩn thận khi thực hiện microbenchmarking
Các công cụ JavaScript hiện đại thực hiện nhiều tối ưu hóa. Họ có thể điều chỉnh kết quả của “các bài kiểm tra nhân tạo” so với “việc sử dụng thông thường”, đặc biệt khi chúng tôi đánh giá một thứ gì đó rất nhỏ, chẳng hạn như cách thức hoạt động của một nhà điều hành hoặc một chức năng tích hợp sẵn. Vì vậy, nếu bạn thực sự muốn hiểu hiệu suất, thì hãy nghiên cứu cách thức hoạt động của công cụ JavaScript. Và sau đó, bạn có thể sẽ không cần microbenchmark nữa
Gói bài viết tuyệt vời về V8 có thể được tìm thấy tại https. //mrale. ph
Phương pháp Ngày. parse[str] có thể đọc một ngày từ một chuỗi
Định dạng chuỗi phải là.
Math.floor[Date.now[] / 1000]
18, ở đâu
19 – là ngày. năm tháng ngàyMath.floor[Date.now[] / 1000]
- Ký tự
30 được sử dụng làm dấu phân cáchDate.now[]
31 – là thời gian. giờ, phút, giây và mili giâyDate.now[]
- Phần tùy chọn
32 biểu thị múi giờ ở định dạngDate.now[]
33. Một chữ cái duy nhấtDate.now[]
34 có nghĩa là UTC+0Date.now[]
Cũng có thể có các biến thể ngắn hơn, như
Math.floor[Date.now[] / 1000]
19 hoặc Date.now[]
36 hoặc thậm chí là Date.now[]
37Lệnh gọi tới
Date.now[]
38 phân tích cú pháp chuỗi theo định dạng đã cho và trả về dấu thời gian [số mili giây từ ngày 1 tháng 1 năm 1970 UTC+0]. Nếu định dạng không hợp lệ, trả về Date.now[]
39Ví dụ
Date.now[]
20Chúng ta có thể tạo ngay một đối tượng
Date.now[]
50 từ dấu thời gianDate.now[]
21- Ngày và giờ trong JavaScript được biểu diễn bằng đối tượng Date. Chúng tôi không thể tạo “chỉ ngày” hoặc “chỉ thời gian”.
23 đối tượng luôn mang theo cả haiDate.now[]
- Các tháng được tính từ 0 [có, tháng 1 là tháng 0]
- Các ngày trong tuần trong
52 cũng được tính từ 0 [đó là Chủ nhật]Date.now[]
23 tự động sửa khi các thành phần nằm ngoài phạm vi được đặt. Tốt cho việc cộng/trừ ngày/tháng/giờDate.now[]
- Ngày có thể được trừ đi, đưa ra sự khác biệt của chúng tính bằng mili giây. Đó là bởi vì một
23 trở thành dấu thời gian khi được chuyển đổi thành một sốDate.now[]
- Sử dụng
11 để lấy nhanh dấu thời gian hiện tạiMath.floor[Date.now[] / 1000]
Lưu ý rằng không giống như nhiều hệ thống khác, dấu thời gian trong JavaScript tính bằng mili giây, không phải giây
Đôi khi chúng ta cần các phép đo thời gian chính xác hơn. Bản thân JavaScript không có cách đo thời gian tính bằng micro giây [1 phần triệu giây], nhưng hầu hết các môi trường đều cung cấp nó. Chẳng hạn, trình duyệt có hiệu suất. now[] cung cấp số mili giây kể từ khi bắt đầu tải trang với độ chính xác micro giây [3 chữ số sau dấu chấm]
Date.now[]
22Nút. js có mô-đun
Date.now[]
56 và các cách khác. Về mặt kỹ thuật, hầu hết mọi thiết bị và môi trường đều cho phép đạt được độ chính xác cao hơn, chỉ là không có trong Date.now[]
23