Ngày và giờ – lớp ngày trong js

Bạn đang xem : lớp ngày trong js

Hãy gặp một đối tượng tích hợp mới: Ngày . Nó lưu trữ ngày, giờ và cung cấp các phương pháp quản lý ngày / giờ.

Ví dụ: chúng tôi 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 mới, hãy gọi new Date () với một trong các đối số sau:

new Date ()

Không có đối số – tạo đối tượng Date cho ngày và giờ hiện tại:


  let now = new Date ();
cảnh báo (bây giờ); // hiển thị ngày / giờ hiện tại  
new Date (mili giây)

Tạo đối tượng Date với thời gian bằng số mili giây (1/1000 giây) sau ngày 1 tháng 1 năm 1970 UTC + 0.


  // 0 nghĩa là 01.01.1970 UTC + 0
let Jan01_1970 = new Date (0);
cảnh báo (Jan01_1970);

// bây giờ thêm 24 giờ, nhận 02.01.1970 UTC + 0
let Jan02_1970 = new Date (24 * 3600 * 1000);
cảnh báo (Jan02_1970);  

Mộ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 ngày. Chúng tôi luôn có thể tạo ngày từ dấu thời gian bằng cách sử dụng new Date (timestamp) và chuyển đổi đối tượng Date hiện có thành dấu thời gian bằng cách sử dụng date.getTime () method (xem bên dưới).

Các ngày trước ngày 01.01.1970 có dấu thời gian âm, ví dụ:


  // ngày 31 tháng 12 năm 1969
let Dec31_1969 = new Date (-24 * 3600 * 1000);
cảnh báo (Dec31_1969);  
new Date (datestring)

Nế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 Date.parse , chúng tôi sẽ đề cập đến nó sau.


  let date = new Date ("2017-01-26");
cảnh báo (ngày tháng);
// Thời gian không được đặt, vì vậy nó được giả định là nửa đêm GMT và
// được điều chỉnh theo múi giờ mà mã được chạy
// Vì vậy, kết quả có thể là
// Thứ Năm ngày 26 tháng 1 năm 2017 11:00:00 GMT + 1100 (Giờ ban ngày miền Đông Úc)
// hoặc
// Thứ Tư ngày 25 tháng 1 năm 2017 16:00:00 GMT-0800 (Giờ Chuẩn Thái Bình Dương)  
new Ngày (năm, tháng, ngày, giờ, phút, giây, mili giây)

Tạo ngày bằng các thành phần đã cho theo múi giờ địa phương. Chỉ hai đối số đầu tiên là bắt buộc.

  • năm phải có 4 chữ số. Để tương thích, 2 chữ số cũng được chấp nhận và được coi là 19xx , ví dụ: 98 giống với 1998 ở đây, nhưng luôn khuyến khích sử dụng 4 chữ số.
  • Đếm tháng bắt đầu bằng 0 (Jan), lên đến 11 (Dec).
  • Tham số date thực sự là ngày trong tháng, nếu không có thì 1 được giả định.
  • Nếu giờ / phút / giây / ms không có, chúng được coi là bằng 0 .

Ví dụ:

  new Ngày (2011, 0, 1, 0, 0, 0, 0); // ngày 1 tháng 1 năm 2011, 00:00:00
ngày mới (2011, 0, 1); // giống nhau, giờ, v.v ... theo mặc định là 0  

Độ chính xác tối đa là 1 ms (1/1000 giây):


  let date = new Ngày (2011, 0, 1, 2, 3, 4, 567);
cảnh báo (ngày tháng); // 1.01.2011, 02: 03: 04.567  

Có các phương pháp để truy cập năm, tháng, v.v. từ đối tượng Ngày :

getFullYear ()
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 trông hơi lạ.
getHours () , getMinutes () , getSeconds () , getMilliseconds ()
Nhận các thành phần thời gian tương ứng.

Không phải getYear () , mà là getFullYear ()

Nhiều công cụ JavaScript triển khai một phương thức không chuẩn getYear () . Phương pháp này không được dùng nữa. Nó đôi khi trả về năm 2 chữ số. Xin đừng bao giờ sử dụng nó. Có getFullYear () cho năm.

Ngoài ra, chúng ta có thể nhận được một ngày trong tuần:

getDay ()
Nhận ngày trong tuần, từ 0 (Chủ nhật) đến 6 (Thứ bảy). Ngày đầu tiên luôn là Chủ nhật, ở một số quốc gia không phải như vậy nhưng không thể thay đổi.

Tấ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 họ, ngày, tháng, năm trả lại, v.v. cho múi giờ UTC + 0: getUTCFullYear () , getUTCMonth () , getUTCDay () . Chỉ cần chèn "UTC" ngay sau "get" .

Nếu múi giờ địa phương của bạn được chuyển sang UTC, thì mã bên dưới hiển thị các giờ khác nhau:


  // ngày hiện tại
let date = new Date ();

// giờ trong múi giờ hiện tại của bạn
alert (date.getHours ());

// giờ ở múi giờ UTC + 0 (giờ Luân Đôn không tính tiết kiệm ánh sáng ban ngày)
alert (date.getUTCHours ());  

Bên cạnh các phương pháp đã cho, có hai phương thức đặc biệt không có biến thể UTC:

getTime ()

Trả về dấu thời gian cho ngày - một số mili giây trôi qua kể 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:


  // nếu bạn đang ở múi giờ UTC-1, kết quả đầu ra là 60
// nếu bạn ở múi giờ UTC + 3, kết quả đầu ra là -180
alert (new Date (). getTimezoneOffset ());  

Các phương pháp sau cho phép đặt các thành phần ngày / giờ:

Mỗi một trong số chúng ngoại trừ setTime () đều có biến thể UTC, ví dụ: setUTCHours () .

Như chúng ta có thể thấy, một số phương pháp có thể đặt nhiều thành phần cùng một lúc, ví dụ: setHours . Các thành phần không được đề cập sẽ không được sửa đổi.

Ví dụ:


  let today = new Date ();

today.setHours (0);
cảnh báo (hôm nay); // vẫn là ngày hôm nay, nhưng giờ được thay đổi thành 0

today.setHours (0, 0, 0, 0);
cảnh báo (hôm nay); // vẫn hôm nay, bây giờ là 00:00:00 sắc nét.  

Tự động sửa là một tính năng rất tiện dụng của các đối tượng Ngày . Chúng tôi có thể đặt các giá trị nằm ngoài phạm vi và nó sẽ tự động điều chỉnh.

Ví dụ:


  let date = new Date (2013, 0, 32); // 32 thg 1, 2013?!?
cảnh báo (ngày tháng); // ... là ngày 1 tháng 2 năm 2013!  

Cá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 tôi cần tăng ngày “28 tháng 2 năm 2016” lên 2 ngày. Nó có thể là “2 tháng 3” hoặc “1 tháng 3” trong trường hợp năm nhuận. Chúng tôi không cần phải nghĩ về nó. Chỉ cần thêm 2 ngày. Đối tượng Date sẽ thực hiện phần còn lại:


  let date = new Date (2016, 1, 28);
date.setDate (date.getDate () + 2);

cảnh báo (ngày tháng); // ngày 1 tháng 3 năm 2016  

Tính năng đó thường được sử dụng để lấy ngày sau một khoảng thời gian nhất định. Ví dụ: hãy lấy ngày trong “70 giây sau bây giờ”:


  let date = new Date ();
date.setSeconds (date.getSeconds () + 70);

cảnh báo (ngày tháng); // hiển thị ngày chính xác  

Chúng tôi cũng có thể đặt các giá trị bằng 0 hoặc thậm chí âm. Ví dụ:


  let date = new Date (2016, 0, 2); // ngày 2 tháng 1 năm 2016

date.setDate (1); // đặt ngày 1 trong tháng
cảnh báo (ngày tháng);

date.setDate (0); // ngày tối thiểu là 1, vì vậy ngày cuối cùng của tháng trước được giả định
cảnh báo (ngày tháng); // Ngày 31 tháng 12 năm 2015  

Khi một đối tượng Date được chuyển đổi thành số, nó sẽ trở thành dấu thời gian giống như date.getTime () :


  let date = new Date ();
alert (+ ngày); // số mili giây, giống như date.getTime ()  

Tá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 theo mili giây.

Giá trị đó có thể được sử dụng để đo thời gian:


  let start = new Date (); // bắt đầu đo thời gian

// thực hiện công việc
for (cho i = 0; i & lt; 100000; i ++) {
  let doSomething = i * i * i;
}

let end = new Date (); // kết thúc thời gian đo

alert (`Vòng lặp mất $ {end - start} ms`);  

Nếu chúng ta chỉ muốn đo thời gian, chúng ta không cần đối tượng Date .

Có một phương thức đặc biệt Date.now () trả về dấu thời gian hiện tại.

Về mặt ngữ nghĩa, nó tương đương với new Date (). getTime () , nhưng nó không tạo đối tượng Date trung gian. Vì vậy, nó nhanh hơn và không gây áp lực cho việc thu gom rác.

Nó đượ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 biệt khác.

Vì vậy, điều này có lẽ tốt hơn:


  let start = Date.now (); // số mili giây từ ngày 1 tháng 1 năm 1970

// thực hiện công việc
for (cho i = 0; i & lt; 100000; i ++) {
  let doSomething = i * i * i;
}

let end = Date.now (); // xong

alert (`Vòng lặp mất $ {end - start} ms`); // trừ số, không trừ ngày  

Nếu chúng ta muốn có một điểm chuẩn đáng tin cậy cho chức năng sử dụng CPU, chúng ta nên cẩn thận.

Ví dụ: hãy đo lường 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".

  // chúng ta có date1 và date2, hàm nào trả về sự khác biệt của chúng theo mili giây nhanh hơn?
function diffSubtract (date1, date2) {
  ngày trở lại2 - date1;
}

// hoặc
function diffGetTime (date1, date2) {
  trả về date2.getTime () - date1.getTime ();
}  

Hai thứ 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 date.getTime () rõ ràng để lấy ngày bằng mili giây và cái kia dựa vào biến đổi ngày thành số . Kết quả của chúng luôn giống nhau.

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 hàm rất đơn giản, vì vậy chúng tôi phải thực hiện nó ít nhất 100000 lần.

Hãy đo lường:


  function diffSubtract (date1, date2) {
  ngày trở lại2 - date1;
}

function diffGetTime (date1, date2) {
  trả về date2.getTime () - date1.getTime ();
}

băng ghế chức năng (f) {
  let date1 = new Date (0);
  let date2 = new Date ();

  let start = Date.now ();
  for (let i = 0; i & lt; 100000; i ++) f (date1, date2);
  return Date.now () - bắt đầu;
}

alert ('Thời gian của diffSubtract:' + băng ghế dự bị (diffSubtract) + 'ms');
alert ('Thời gian diffGetTime:' + băng ghế dự bị (diffGetTime) + 'ms');  

Chà! Sử dụng getTime () nhanh hơn rất nhiều! Đó là do không có chuyển đổi loại, nên các công cụ 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à điểm chuẩn tốt.

Hãy tưởng tượng rằng tại thời điểm chạy băng ghế dự bị (diffSubtract) , CPU đang làm một việc gì đó song song và nó đang sử dụng tài nguyên. Và đến khi chạy băng ghế dự bị (diffGetTime) thì công việc đó đã kết thúc.

Một kịch bản khá thực tế cho một hệ điều hành đa quy 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.

Để có đ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:


  function diffSubtract (date1, date2) {
  ngày trở lại2 - date1;
}

function diffGetTime (date1, date2) {
  trả về date2.getTime () - date1.getTime ();
}

băng ghế chức năng (f) {
  let date1 = new Date (0);
  let date2 = new Date ();

  let start = Date.now ();
  for (let i = 0; i & lt; 100000; i ++) f (date1, date2);
  return Date.now () - bắt đầu;
}

để time1 = 0;
để time2 = 0;

// chạy băng ghế dự bị (diffSubtract) và băng ghế dự bị (diffGetTime) mỗi 10 lần xen kẽ
for (cho i = 0; i & lt; 10; i ++) {
  time1 + = băng ghế dự bị (diffSubtract);
  time2 + = băng ghế dự bị (diffGetTime);
}

alert ('Tổng thời gian cho diffSubtract:' + time1);
alert ('Tổng thời gian cho diffGetTime:' + time2);  

Các công cụ JavaScript hiện đại chỉ bắt đầu áp dụng các 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, các lần thực thi đầ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 đợt khởi động:

  // được thêm vào để "làm nóng" trước vòng lặp chính
băng ghế dự bị (diffSubtract);
băng ghế (diffGetTime);

// điểm chuẩn bây giờ
for (cho i = 0; i & lt; 10; i ++) {
  time1 + = băng ghế dự bị (diffSubtract);
  time2 + = băng ghế dự bị (diffGetTime);
}  

Hãy cẩn thận khi thực hiện đánh dấu 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 “thử nghiệm nhân tạo” so với “cách sử dụng bình 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 hoạt động của một nhà điều hành hoặc một chức năng tích hợp. Vì vậy, nếu bạn thực sự muốn hiểu về hiệu suất, thì hãy nghiên cứu cách hoạt động của công cụ JavaScript. Và sau đó, bạn có thể sẽ không cần dấu vi bàn.

Bạn có thể tìm thấy nhiều bài viết về V8 tại http://mrale.ph .

Phương thức Date.parse (str) có thể đọc ngày tháng từ một chuỗi.

Định dạng chuỗi phải là: YYYY-MM-DDTHH: mm: ss.sssZ , trong đó:

  • YYYY-MM-DD - là ngày: năm-tháng-ngày.
  • Ký tự "T" được sử dụng làm dấu phân tách.
  • HH: mm: ss.sss - là thời gian: giờ, phút, giây và mili giây.
  • Phần 'Z' tùy chọn biểu thị múi giờ ở định dạng + -hh: mm . Một chữ cái duy nhất Z có nghĩa là UTC + 0.

Cũng có thể có các biến thể ngắn hơn, như YYYY-MM-DD hoặc YYYY-MM hoặc thậm chí YYYY .

Lệnh gọi tới Date.parse (str) 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ề NaN .

Ví dụ:


  let ms = Date.parse ('2012-01-26T13: 51: 50.417-07: 00');

cảnh báo (ms); // 1327611110417 (dấu thời gian)  

Chúng tôi có thể tạo ngay đối tượng new Date từ dấu thời gian:


  let date = new Date (Date.parse ('2012-01-26T13: 51: 50.417-07: 00'));

cảnh báo (ngày);  
  • Ngày và giờ trong JavaScript được thể hiện bằng đối tượng Ngày . Chúng tôi không thể tạo “chỉ ngày” hoặc “chỉ thời gian”: các đối tượng Ngày luôn mang cả hai.
  • Các tháng được tính từ 0 (vâng, tháng 1 là tháng 0).
  • Các ngày trong tuần trong getDay () cũng được tính từ 0 (đó là Chủ nhật).
  • Ngày tự động sửa khi các thành phần nằm ngoài phạm vi được đặt. Tốt để cộng / trừ ngày / tháng / giờ.
  • Các ngày có thể được trừ đi, tạo ra sự khác biệt của chúng tính bằng mili giây. Đó là vì Ngày trở thành dấu thời gian khi được chuyển đổi thành một số.
  • Sử dụng Date.now () để lấy nhanh dấu thời gian hiện tại.

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 chứ không phải giây.

Đôi khi chúng tôi 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ó. Ví dụ: trình duyệt có performance.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):

  alert (`Đã bắt đầu tải $ {performance.now ()} ms trước`);
// Một cái gì đó như: "Đang tải bắt đầu 34731.26000000001ms trước"
// .26 là micro giây (260 micro giây)
// hơn 3 chữ số sau dấu thập phân là lỗi chính xác, chỉ 3 chữ số đầu tiên là đúng  

Node.js có mô-đun microtime 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 có độ chính xác cao hơn, điều đó không phải ở Date .


Xem thêm những thông tin liên quan đến chủ đề lớp ngày trong js

Các hàm xử lý ngày tháng trong Javascript

  • Tác giả: ZendVN - Học Lập Trình Online
  • Ngày đăng: 2022-05-15
  • Đánh giá: 4 ⭐ ( 3770 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Tham khảo khóa học đầy đủ tại
    ----------------------------------------

    👉 Website: www.zendvn.com
    👉 Học lập trình offline ở Hồ Chí Minh: https://zendvn.com/hoc-lap-trinh-offline
    👉 Học lập trình online 1 kèm 1: https://zendvn.com/1kem1
    👉 Facebook: https://www.facebook.com/luutruonghailan

Định dạng ngày tháng trong JavaScript

  • Tác giả: freehost.page
  • Đánh giá: 5 ⭐ ( 1715 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Hàm xử lý ngày tháng trong Javascript (tính toán thời gian)

  • Tác giả: freetuts.net
  • Đánh giá: 3 ⭐ ( 1075 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Các hàm xử lý ngày tháng trong Javascript, qua đó giúp bạn lấy ngày tháng năm, lấy ngày hiện tại, cũng như lấy giờ hiện tại trong JS dễ dàng.

Xử lý ngày tháng trong JavaScript

  • Tác giả: viblo.asia
  • Đánh giá: 4 ⭐ ( 1897 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Thao tác và hiển thị ngày tháng gần như xuất hiện trong tất cả các ứng dụng JavaScript. Trình duyệt và NodeJS cung cấp lớp Date để thể hiện kiểu dữ liệu này, nhưng các phương thức của lớp này lại khá...

Đối tượng date trong javascript

  • Tác giả: toidicode.com
  • Đánh giá: 4 ⭐ ( 4886 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Bài này, chúng ta sẽ tìm hiểu về đối tượng date trong javascript. Một đối tượng được dùng rất là nhiều trên các trang web.

Lập trình hướng đối tượng trong javascript

  • Tác giả: longnv.name.vn
  • Đánh giá: 3 ⭐ ( 7433 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Lập trình hướng đối tượng trong javascript hướng dẫn bạn các cách tạo đối tượng trong javavascript và các vấn đề trong OPP.

Xây dựng một lớp Date mô tả thông tin về ngày, tháng, năm (month, day, year).

  • Tác giả: vncoding.net
  • Đánh giá: 3 ⭐ ( 9360 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình

Xem Thêm  Tạo một bộ giá trị bằng Python - tạo một con trăn tuple