JavaScript là ngôn ngữ lập trình nhẹ được sử dụng cho World Wide Web. Đối tượng JavaScript
let currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
1 rất hữu ích để kiểm tra ngày giờ khách truy cập vào trang web của bạnHướng dẫn này sẽ hướng dẫn bạn cách sử dụng JavaScript để lấy ngày và giờ hiện tại từ ứng dụng khách
điều kiện tiên quyết
- Quen thuộc với JavaScript [bao gồm tạo, lưu và chạy tập lệnh]
- Một trình soạn thảo văn bản để viết kịch bản
- Truy cập vào trình duyệt để mở tệp HTML
Tạo đối tượng ngày trong JavaScript
Đối tượng JavaScript
let currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
2 trợ giúp khi làm việc với ngày tháng. Để tạo một đối tượng mới với ngày và giờ hiện tại, hãy thêm đối tượng vào tập lệnh của bạn
Demo: Current Date
Lưu mã vào một. html và mở bằng trình duyệt của bạn
Đối tượng hiển thị ngày, giờ và múi giờ hiện tại
Dưới đây là các phương pháp để lấy các phần tử ngày và giờ riêng lẻ
Sử dụng phương thức Get để hiển thị ngày hiện tại trong JavaScript
Nếu bạn muốn lấy ngày ở định dạng YYYY-MM-DD, hãy tạo một tài liệu HTML và thêm đoạn mã sau
Demo: Current Date
Dòng thứ hai trong tập lệnh bao gồm các hướng dẫn sau
3 – Sử dụng biến hôm nay để hiển thị năm có 4 chữ sốlet currentDate = new Date[]; let someDate = new Date['December 12, 2020 18:30:01']; let someDate = new Date['2021-12-12T18:30:01']; let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
4 – Hiển thị tháng số. +1 chuyển đổi tháng từ kỹ thuật số [0-11] sang bình thườnglet currentDate = new Date[]; let someDate = new Date['December 12, 2020 18:30:01']; let someDate = new Date['2021-12-12T18:30:01']; let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
5 – Hiển thị số ngày trong thánglet currentDate = new Date[]; let someDate = new Date['December 12, 2020 18:30:01']; let someDate = new Date['2021-12-12T18:30:01']; let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
Nếu bạn thích một định dạng khác, chỉ cần thay đổi thứ tự của các lệnh
Ghi chú. Có một dấu gạch ngang giữa mỗi lệnh. Điều này tạo ra một dấu gạch ngang giữa mỗi phân đoạn của ngày
Hiển thị Giờ, Phút và Giây bằng JavaScript
Để hiển thị thời gian trong HH. MM. Định dạng SS, chỉnh sửa tập lệnh của bạn để trông như sau
Demo: Current Date
6 – Điều này sử dụng biến hôm nay để hiển thị giờ hiện tại. Cái này sử dụng đồng hồ 24 giờlet currentDate = new Date[]; let someDate = new Date['December 12, 2020 18:30:01']; let someDate = new Date['2021-12-12T18:30:01']; let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
0 – Hiển thị số phút hiện tạiDemo: Current Date
1 – Hiển thị số giây hiện tạiDemo: Current Date
Ghi chú. Có dấu hai chấm giữa mỗi câu lệnh. Điều này đặt một dấu hai chấm giữa mỗi màn hình số để nó đọc giống như một chiếc đồng hồ
Hiển thị đầy đủ ngày và giờ hiện tại trong JavaScript
Kết hợp hai lệnh để hiển thị đầy đủ ngày và giờ trong YYYY-MM-DD và HH. MM. định dạng SS. Chỉnh sửa kịch bản của bạn như sau
Demo: Current Date
Dòng cuối cùng kết hợp hai đoạn mã khác. Điều này hướng dẫn hệ thống hiển thị ngày đầy đủ bên cạnh toàn thời gian
Phần kết luận
Bây giờ bạn có thể viết một đoạn JavaScript đơn giản để truy xuất ngày giờ hiện tại. Điều này có thể hữu ích để tạo dấu thời gian, bằng cách liên kết tập lệnh này với một hành động và ghi nó vào tệp nhật ký
Câu hỏi – Làm cách nào để lấy ngày và giờ hiện tại trong JavaScript? . i. s trong JavaScript?
Thời gian là một phần quan trọng trong cuộc sống của chúng ta và chúng ta không thể trốn tránh nó. Trong thói quen hàng ngày của chúng tôi, chúng tôi cần phải biết ngày hoặc thời gian hiện tại thường xuyên. JavaScript cung cấp một biến toàn cục Ngày giúp bạn lấy Ngày & Giờ hiện tại trong JavaScript. Tuy nhiên, nó sẽ không cung cấp cho bạn thông tin chính xác và trả về thời gian máy tính cục bộ thay vì thời gian UTC. Để có được Ngày & Giờ chính xác trong JavaScript, bạn cần sử dụng các API khác nhau do chính JavaScript cung cấp. Bạn cũng có thể lấy ngày và giờ ở các định dạng như YYYY-MM-DD và HH. MM. định dạng SS
Bài viết này giải thích tất cả về cách lấy Ngày & Giờ hiện tại trong JavaScript với các ví dụ và phương pháp hay nhất
Nhận ngày và giờ hiện tại trong JavaScript
Sử dụng hàm
let currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
2 để tạo một đối tượng trong JavaScript với ngày giờ hiện tại. Điều này cung cấp đầu ra trong múi giờ UTC1
var hôm nay = mới Ngày[];
1. Ngày hiện tại trong JavaScript
Sử dụng tập lệnh sau để lấy ngày và giờ hiện tại bằng JavaScript trong phần “Y-m-d H. i. định dạng s. Bạn có thể chỉ cần kết hợp đầu ra của mã JavaScript ở trên trong một biến như bên dưới
Thời gian đóng một vai trò thiết yếu trong cuộc sống của chúng ta. Do đó, với tư cách là nhà phát triển, chúng tôi phải làm việc với ngày và giờ khá thường xuyên. Phần mềm máy tính được sử dụng bởi mọi người từ mọi nơi trên thế giới và thời gian ở một khu vực có thể khác với thời gian ở khu vực khác. Và, nói chung, trong phần mềm chúng tôi xây dựng, chúng tôi nắm bắt và xử lý ngày và giờ của các sự kiện và bản ghi dữ liệu khác nhau. Do đó, điều quan trọng là phải hiểu các sắc thái khác nhau khi làm việc với ngày và giờ
Ngày và thời gian có thể được biểu diễn ở nhiều định dạng khác nhau. Ở Ukraine, ngày thường được viết theo định dạng "DD-MM-YYYY" [ngày đầu tiên], trong khi ở Hoa Kỳ, định dạng phổ biến là "MM-DD-YYYY" [tháng đầu tiên]
Tùy thuộc vào khu vực địa lý hoặc một đơn vị chính trị [đ. g. , một quốc gia], múi giờ có thể khác nhau. Ví dụ, vào mùa hè, trong khi ở Kiev, thời gian là 21. 00, ở New York thời gian là 14. 00 [trừ bảy giờ]. Ngoài ra, điều quan trọng cần đề cập là lựa chọn/định nghĩa múi giờ ở một quốc gia/khu vực cụ thể có thể bị ảnh hưởng bởi một quyết định chính trị. Một quốc gia có thể chọn độ lệch UTC khác với vị trí địa lý thực tế của quốc gia đó Độ lệch UTC
Tất cả các múi giờ được xác định là phần bù cho Giờ phối hợp quốc tế [UTC], nằm trong khoảng từ UTC-12. 00 đến UTC+14. 00. Điểm tham chiếu địa lý cho UTC là kinh tuyến gốc [kinh độ = 0°], chạy qua Đài thiên văn Hoàng gia ở Greenwich, London, Vương quốc Anh
Ngoài ra, ở các khu vực khác nhau trên thế giới, mọi người thực hành Giờ tiết kiệm ánh sáng ban ngày [DST] hay nói cách khác - giờ mùa hè. Đây là cách quay đồng hồ về phía trước một giờ so với giờ tiêu chuẩn trong những tháng ấm hơn để có nhiều ánh sáng ban ngày hơn trong những giờ chúng ta thường thức. Ví dụ: ở Ukraine, chúng tôi quay đồng hồ về phía trước một giờ vào Chủ nhật cuối cùng của tháng 3 lúc 03. 00 và chúng tôi quay trở lại thời gian tiêu chuẩn [quay ngược đồng hồ một giờ] vào Chủ nhật cuối cùng của tháng 10 lúc 04. 00. Ngày và giờ DST bắt đầu và kết thúc tùy thuộc vào một quốc gia hoặc một đơn vị chính trị [e. g. , Liên minh châu Âu. ]
Ngoài ra, độ lệch múi giờ của khu vực chính trị và/hoặc ngày và giờ khi DST bắt đầu và kết thúc có thể đã bị thay đổi tại một số thời điểm trong lịch sử. Do đó, có một số cơ sở dữ liệu theo dõi thông tin về sự thay đổi múi giờ. Phổ biến nhất là IANA - Cơ sở dữ liệu múi giờ, còn được gọi là tz hoặc zoneinfo. Hệ điều hành và phần mềm máy tính khác sử dụng các cơ sở dữ liệu này để xử lý và chuyển đổi múi giờ
Một định dạng phổ biến để biểu thị các giá trị ngày và giờ trong lập trình máy tính là dấu thời gian Unix, là một số giây giữa kỷ nguyên Unix [1 tháng 1 năm 1970 00. 00. 00 UTC] và một ngày khác [e. g. , 1620758838]. Các số nguyên dương biểu thị các ngày sau kỷ nguyên Unix, trong khi các số nguyên âm biểu thị các ngày trước kỷ nguyên Unix
Dấu thời gian Unix là một trong những định dạng phổ biến để lưu trữ ngày và giờ trong hệ điều hành và cơ sở dữ liệu
Tìm hiểu thêm về dấu thời gian Unix trên Wikipedia. thời gian Unix
Về cơ bản, ngày JavaScript được chỉ định là số mili giây kể từ ngày 1 tháng 1 năm 1970 00. 00. 00 UTC. Con số này trông tương tự như dấu thời gian Unix. Sự khác biệt là dấu thời gian Unix là số giây kể từ kỷ nguyên Unix trong khi ở JavaScript, đó là số mili giây
Trong JavaScript, chúng tôi sử dụng đối tượng Ngày để làm việc với ngày và giờ
const date = new Date[];
Đối tượng Date giữ ngày và giờ hiện tại theo UTC trong nội bộ. Tuy nhiên, theo mặc định, khi chúng ta xuất ngày và giờ, đối tượng Date sẽ chuyển đổi kết quả đầu ra thành múi giờ địa phương, múi giờ của môi trường nơi mã JavaScript đang chạy [e. g. , một trình duyệt, Nút. js, v.v. ]
Khi được khởi tạo mà không có tham số, đối tượng ngày sẽ giữ ngày và giờ hiện tại [
const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
3 giữ ngày hiện tại]Chúng ta có thể đặt ngày và giờ trong hàm tạo của Ngày hoặc sau khi khởi tạo
________số 8Khi chúng tôi khởi tạo lớp Ngày, ngày đã chỉ định sẽ được chuyển đổi thành và theo dõi trong nội bộ UTC. Tuy nhiên, khi chúng ta truy cập ngày bằng các phương thức cơ bản [e. g. ,
const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
4, const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
5, const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
6, v.v.] ngày được trả về theo múi giờ địa phươngconst myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
Ở đây, chúng tôi khởi tạo lớp Ngày chỉ định ngày theo UTC, nhưng khi chúng tôi in đối tượng ngày đã khởi tạo, chúng tôi nhận được ngày theo múi giờ địa phương, đối với tôi là UTC+03. 00 [Giờ mùa hè Đông Âu]. Vì vậy, ngày được lưu trữ nội bộ theo UTC, nhưng khi chúng tôi truy cập ngày bằng các phương thức cơ bản, nó sẽ được chuyển đổi thành múi giờ địa phương
Các phương thức phổ biến nhất của đối tượng Date là
Demo: Current Date
3Tìm hiểu thêm về đối tượng Ngày trên MDN Web Docs. Ngày tháng
Demo: Current Date
4Ở đây, chúng tôi tạo hai đối tượng ngày, 11 tháng 5 năm 2021 và 12 tháng 5 năm 2021. Sau đó, chúng tôi trừ ngày 11 tháng 5 năm 2021 [
const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
7] từ ngày 12 tháng 5 năm 2021 [const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
8] và nhận được 24 giờ chênh lệchKhi bạn làm việc với các đối tượng ngày, hãy tính đến các múi giờ mà các đối tượng ngày này được khởi tạo với. Kiểm tra một ví dụ khác
Demo: Current Date
7Ở đây, câu trả lời là -2, vì múi giờ của
const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
7 là UTC trong khi múi giờ của const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
8 là UTC+3. Hãy xem những gì xảy ra chi tiết hơn- Chúng tôi đặt
7 thành ngày 12 tháng 5 năm 2021 00. 00. 00 UTC sử dụng định dạng ISO 8601. Chúng tôi chỉ định múi giờ UTC bằng ký tự Z. Chúng tôi cũng có thể chỉ định múi giờ bằng cách sử dụng phần bù, như thế này. 2021-05-12T00. 00. 00. 000+00. 00 [+00. 00 là UTC]const myDate = new Date['11 May 2021 18:30:01 UTC']; console.log[myDate]; // Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time] console.log[myDate.getHours[]]; // 21, not 18 as you might have expected
- Chúng tôi đặt
8 đến ngày 12 tháng 5 năm 2021 01. 00. 00 sử dụng định dạng ngày và giờ khác với độ lệch múi giờ UTC+3 [hoặc UTC+03. 00]const myDate = new Date['11 May 2021 18:30:01 UTC']; console.log[myDate]; // Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time] console.log[myDate.getHours[]]; // 21, not 18 as you might have expected
- Sau đó, chúng tôi trừ date1 từ date2 [______133]. Khi chúng ta sử dụng một phép toán trên một đối tượng, JavaScript sẽ chuyển đổi đối tượng thành một số bằng cách sử dụng phương thức valueOf[] của đối tượng nếu nó hiện diện. Trong trường hợp của đối tượng Date, phương thức
34 trả về ngày và giờ dưới dạng số mili giây kể từ Kỷ nguyên Unix, là biểu diễn ngày và giờ dựa trên UTC. Vì vậy,Demo: Current Date
7 đã được đặt ở UTC, trong khiconst myDate = new Date['11 May 2021 18:30:01 UTC']; console.log[myDate]; // Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time] console.log[myDate.getHours[]]; // 21, not 18 as you might have expected
8 đã được chuyển thành UTC từ UTC+3. Vì vậy, trên thực tế, chúng tôi trừ ngày 12 tháng 5 năm 2021 01. 00. 00 UTC [const myDate = new Date['11 May 2021 18:30:01 UTC']; console.log[myDate]; // Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time] console.log[myDate.getHours[]]; // 21, not 18 as you might have expected
7] từ ngày 11 tháng 5 năm 2021 22. 00. 00 UTC [const myDate = new Date['11 May 2021 18:30:01 UTC']; console.log[myDate]; // Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time] console.log[myDate.getHours[]]; // 21, not 18 as you might have expected
8] và đó là cách chúng tôi nhận được -2 cho kết quảconst myDate = new Date['11 May 2021 18:30:01 UTC']; console.log[myDate]; // Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time] console.log[myDate.getHours[]]; // 21, not 18 as you might have expected
Một cách để định dạng ngày là sử dụng các hàm getter như getFullYear, getMonth, getDate, v.v. Ví dụ: để tạo chuỗi ngày và giờ theo giờ địa phương ở định dạng 'YYYY-MM-DD hh. mm. ss' chúng ta có thể làm như sau
Demo: Current Date
8Để lấy giá trị ngày và giờ theo UTC, chúng ta có thể sử dụng các hàm getter dựa trên UTC như getUTCFullYear, getUTCMonth, getUTCDate, v.v.
Hơn nữa, chúng ta có thể lấy chuỗi ngày và giờ từ đối tượng Date được định dạng theo một ngôn ngữ nhất định và các tùy chọn khác nhau bằng cách sử dụng phương thức
const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
5 của Date
Demo: Current Date
0Xin lưu ý rằng nếu bạn không chỉ định múi giờ trong các tùy chọn,
const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
5 sẽ xuất ngày theo múi giờ địa phương
Demo: Current Date
2Đầu tiên, chúng tôi khởi tạo đối tượng Ngày với múi giờ địa phương và lấy chuỗi ngày và giờ được bản địa hóa. Khi Ngày được bắt đầu, giá trị ngày và giờ được chuyển đổi nội bộ từ múi giờ đã chỉ định [hoặc múi giờ địa phương nếu múi giờ không được chỉ định] sang UTC
Sau đó, chúng tôi khởi tạo một đối tượng Ngày khác với múi giờ địa phương. Lần này, chúng tôi đặt tùy chọn
Demo: Current Date
41 thành "Châu Âu/Amsterdam" [theo Cơ sở dữ liệu múi giờ IANA]. Do đó, chúng tôi nhận được chuỗi ngày và giờ được bản địa hóa dựa trên múi giờ "Châu Âu/Amsterdam". Chi tiết hơn. múi giờ hiện tại của tôi là UTC+3, vì vậy đối tượng Ngày được khởi tạo với ngày và giờ 2021-05-16 00. 00. 00 UTC+3 được chuyển đổi thành UTC nội bộ và trở thành 2021-05-15 21. 00. 00. Sau đó, phương thức const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
5 chuyển đổi ngày này từ UTC thành "Europe/Amsterdam" và kết quả là 15/5/2021, 11. 00. 00 giờ chiều GMT+2. Độ lệch kết quả là +2, bởi vì đó là độ lệch Giờ tiết kiệm ánh sáng ban ngày của múi giờ "Châu Âu/Amsterdam"Thông thường, phần mềm máy tính [e. g. , Nút. js, cơ sở dữ liệu, v.v.] theo mặc định sử dụng cấu hình ngày và giờ của hệ thống. Do đó, hãy đảm bảo rằng tất cả các máy chủ thuộc về ứng dụng của bạn đều sử dụng cùng một múi giờ. UTC thường được sử dụng
Trong Linux, bạn có thể kiểm tra múi giờ bằng một trong các lệnh sau
Demo: Current Date
5Để thay đổi múi giờ hệ thống, bạn có thể sử dụng các lệnh sau
let currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
0Để kiểm tra múi giờ của Node. quy trình js
let currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
1trong nút. js, bạn có thể đặt múi giờ bằng biến môi trường
Demo: Current Date
43let currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
2Nếu biến
Demo: Current Date
43 không được đặt, Nút. js sẽ cố gắng sử dụng múi giờ của hệ điều hànhThông thường, các ứng dụng web có sẵn từ mọi nơi trên thế giới. Điều này có nghĩa là nếu chúng tôi lưu trữ ngày trong cơ sở dữ liệu, chúng tôi cần đảm bảo rằng chúng tôi lưu trữ tất cả các ngày trong một múi giờ [nhất quán] hoặc ít nhất là theo dõi múi giờ của ngày mà chúng tôi lưu trữ. Các cơ sở dữ liệu khác nhau có các chi tiết cụ thể về cách chúng xử lý các giá trị ngày và giờ. Vì vậy, trong phần này, tôi muốn giải thích ngắn gọn cách lưu trữ các giá trị ngày và giờ trong các cơ sở dữ liệu khác nhau và đề cập đến một số chi tiết cụ thể đó
Thông thường, phần mềm [đặc biệt là ứng dụng web] phục vụ người dùng từ khắp nơi trên thế giới. Giờ địa phương của mỗi người dùng phụ thuộc vào vị trí của họ. Ví dụ: đối với người dùng từ Kiev, giờ địa phương vào mùa hè là 17. 00 và đồng thời đối với người dùng ở Amsterdam, giờ địa phương là 16. 00
Về cơ bản, chúng ta nên chuyển đổi và lưu trữ ngày tháng trong một múi giờ thống nhất; . Vì vậy, trước khi lưu trữ một ngày, chúng ta nên chuyển đổi nó từ giờ địa phương sang UTC. Ví dụ: người dùng từ Amsterdam tạo lời nhắc trong ứng dụng lịch. Người dùng chọn ngày giờ nhắc nhở theo giờ địa phương [múi giờ "Châu Âu/Amsterdam" - UTC+01. 00 giờ chuẩn và UTC+02. 00 DST]. Giả sử người dùng đặt ngày nhắc nhở là ngày 12 tháng 5 năm 2021 17. 00 sử dụng tiện ích lịch. Bây giờ, trước khi chúng tôi lưu trữ ngày này trong cơ sở dữ liệu, chúng tôi nên chuyển đổi nó thành UTC và ngày sẽ trở thành. 12 Tháng năm 2021 15. 00 theo giờ UTC, vì Giờ mùa hè ở Amsterdam [UTC+02. 00] bắt đầu hoạt động vào ngày 28 tháng 3 năm 2021 lúc 02. 00. 00. May mắn thay, chúng ta thường không phải xử lý logic chuyển đổi múi giờ, vì nó thường được tích hợp sẵn trong ngôn ngữ lập trình và phần mềm [e. g. , một cơ sở dữ liệu] chúng tôi sử dụng. Ví dụ: trong JavaScript, chúng ta có thể lấy ngày và giờ hiện tại theo UTC bằng cách sử dụng đối tượng Date
let currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
3mysql
Trong MySQL, ngày thường được lưu trữ bằng cách sử dụng các loại cột
Demo: Current Date
45 và
Demo: Current Date
46DẤU THỜI GIAN của MySQL
MySQL chuyển đổi giá trị
Demo: Current Date
46 từ múi giờ hiện tại [e. g. , múi giờ toàn cầu hoặc múi giờ phiên máy khách] sang UTC để lưu trữ và quay lại từ UTC về múi giờ hiện tại để truy xuất. MySQL không làm điều này với các loại cột khác, như
Demo: Current Date
45. Vì vậy, các giá trị
Demo: Current Date
46 được chuyển đổi thành UTC để lưu trữ, nhưng khi chúng được truy xuất, chúng được chuyển đổi thành múi giờ hiện tại [_______170]. Vui lòng kiểm tra ví dụ nàylet currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
4Kể từ MySQL 8. 0. 19 chúng ta có thể thêm phần bù múi giờ khi chèn các giá trị
Demo: Current Date
46 và
Demo: Current Date
45 vào bảnglet currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
5Hãy xem điều gì xảy ra trong ví dụ này
- Chúng tôi đặt múi giờ hiện tại thành UTC+2
- Chúng tôi chèn một giá trị ngày với độ lệch múi giờ UTC-1. 2021-05-12 21. 00. 00-01. 00. MySQL chuyển đổi giá trị ngày và giờ này từ UTC-1 thành UTC để lưu trữ. 2021-05-12 22. 00. 00
- Chúng tôi chọn các hàng từ bảng của mình và MySQL chuyển đổi các giá trị
46 từ UTC sang múi giờ hiện tại [UTC+2] khi truy xuất. 2021-05-13 00. 00. 00Demo: Current Date
- Sau đó, chúng tôi đặt múi giờ thành UTC+3 và chọn lại các hàng và vì MySQL chuyển đổi các giá trị
46 từ UTC sang múi giờ hiện tại khi truy xuất, nên lần này chúng tôi nhận được ngày mà chúng tôi đã chèn trước đó vào UTC+3. 2021-05-13 01. 00. 00Demo: Current Date
Loại
Demo: Current Date
46 có phạm vi 1970-01-01 00. 00. 01 UTC đến 2038-01-19 03. 14. 07 UTCMySQL DATETIME
MySQL
Demo: Current Date
45 được lưu trữ và truy xuất nguyên trạnglet currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
6MySQL không chuyển đổi giá trị
Demo: Current Date
45 từ múi giờ hiện tại sang UTC và ngược lạiTuy nhiên, một điều thú vị xảy ra khi chúng ta chèn một giá trị
Demo: Current Date
45 với phần bù múi giờlet currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
7Trong ví dụ trên, chúng ta có thể thấy rằng khi chúng ta chèn một giá trị
Demo: Current Date
45 với phần bù múi giờ, MySQL sẽ chuyển đổi giá trị ngày này thành múi giờ hiện tại để lưu trữ. 2021-05-12 21. 00. 00+00. 00 + độ lệch múi giờ hiện tại [+03. 00] = 2021-05-13 00. 00. 00Loại
Demo: Current Date
45 có phạm vi 1000-01-01 00. 00. 00 đến 9999-12-31 23. 59. 59Để lưu trữ giá trị ngày và giờ, tôi sẽ chuyển đổi giá trị ngày và giờ cục bộ thành UTC trong mã ứng dụng và lưu trữ giá trị này trong cột DATETIME. Về cơ bản, tôi sẽ xử lý chuyển đổi múi giờ ở phía ứng dụng và lưu trữ tất cả các ngày trong UTC. Tôi sẽ sử dụng DATETIME thay vì DẤU THỜI GIAN, vì DẤU THỜI GIAN thực sự là một số nguyên 32 bit và không cho phép lưu trữ ngày sau 2038-01-19 03. 14. 07 UTC, trong khi DATETIME cho phép chúng tôi lưu trữ ngày lên tới 9999-12-31 23. 59. 59. 999999
PostgreSQL
Trong PostgreSQL, chúng tôi thường lưu trữ các giá trị ngày và giờ bằng cách sử dụng các loại cột
Demo: Current Date
81 [hoặc đơn giản là
Demo: Current Date
82] hoặc
Demo: Current Date
83 [hoặc đơn giản là
Demo: Current Date
84]. Cả hai loại đều có phạm vi từ 4713 trước Công nguyên đến 294276 sau Công nguyênDấu thời gian PostgreSQL không có múi giờ
Các giá trị
Demo: Current Date
81 được lưu trữ và truy xuất nguyên trạnglet currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
8Trong ví dụ này, chúng tôi tạo một cột
Demo: Current Date
81 được gọi là created_at. Và, chúng ta có thể thấy rõ rằng giá trị ngày và giờ được lưu trữ và truy xuất từ cột này. Nếu chúng tôi chỉ định múi giờ, múi giờ sẽ bị bỏ quaDấu thời gian PostgreSQL với múi giờ
Các giá trị
Demo: Current Date
83 [
Demo: Current Date
84] được chuyển đổi từ múi giờ đã chỉ định sang UTC. Nếu bạn không chỉ định múi giờ khi chèn giá trị
Demo: Current Date
84, PostgreSQL sẽ cho rằng giá trị ngày này dựa trên múi giờ hiện tại [
Demo: Current Date
00]let currentDate = new Date[];
let someDate = new Date['December 12, 2020 18:30:01'];
let someDate = new Date['2021-12-12T18:30:01'];
let someDate = new Date[2021, 11, 12, 18, 30, 1]; // Month's index is zero-based
let someDate = new Date[1639326601000]; // Number of milliseconds from Jan 1, 1970 00:00:00 UTC
9Điều xảy ra trong ví dụ này là như sau
- Chúng tôi tạo một bảng có một cột được gọi là created_at có loại
83Demo: Current Date
- Chúng tôi đặt múi giờ hiện tại cho phiên thành UTC+3. Xin lưu ý rằng trong PostgreSQL, chúng tôi có thể chỉ định múi giờ hiện tại bằng cách sử dụng số nguyên bù hoặc tên múi giờ [e. g. , Mỹ/New_York]. Để có danh sách tên múi giờ được hỗ trợ, hãy truy vấn bảng pg_timezone_names.
02Demo: Current Date
- Chúng tôi đảm bảo rằng phần bù múi giờ đã được đặt chính xác
- Chúng tôi chèn một hàng có giá trị created_at là 2021-05-12 09. 00. 00 +01. 00 vào bảng mới. Bởi vì cột created_at có loại
83, PostgreSQL chuyển đổi giá trị ngày từ múi giờ đã chỉ định [+01. 00 trong trường hợp của chúng tôi] sang UTC để lưu trữ. Vì vậy, giá trị thực sự được lưu trữ là "2021-05-12 08. 00. 00"Demo: Current Date
- Chúng tôi chọn hàng đã chèn từ bảng và giá trị ngày được chuyển đổi từ UTC sang múi giờ hiện tại là UTC+3
- Chúng tôi chèn một hàng khác vào bảng, nhưng lần này không chỉ định phần bù múi giờ. Nếu chúng tôi không bao gồm phần bù múi giờ, PostgreSQL sẽ giả định rằng giá trị ngày mà chúng tôi cung cấp dựa trên múi giờ hiện tại, trong trường hợp của chúng tôi là UTC+3. Vì vậy, trước khi lưu trữ giá trị ngày này, PostgreSQL sẽ chuyển đổi nó từ múi giờ hiện tại [UTC+3 trong trường hợp của chúng tôi] sang UTC và giá trị ngày sau sẽ được lưu trữ. 2021-05-12 06. 00. 00 UTC
- Cuối cùng, chúng tôi chọn lại tất cả các hàng từ bảng của mình và thấy rằng giá trị ngày mà chúng tôi vừa chèn được hiển thị theo múi giờ hiện tại. 2021-05-12 09. 00. 00+03
Để lưu trữ giá trị ngày và giờ trong PostgreSQL, tôi sẽ sử dụng loại
Demo: Current Date
04. Về cơ bản, tôi sẽ chọn dấu thời gian thay vì dấu thời gian, vì những lý do được đề cập trong bài viết sau từ PostgreSQL Wiki. Đừng làm điều này - Lưu trữ ngày/giờDynamoDB
Bạn có thể sử dụng các kiểu dữ liệu chuỗi và số để lưu trữ ngày tháng và dấu thời gian. Chúng ta có thể sử dụng kiểu dữ liệu chuỗi để lưu trữ các giá trị ngày và giờ ở định dạng ISO 8601 [e. g. , 2021-05-12, 2021-05-12T21. 00. 59. 123Z]. Và chúng ta có thể sử dụng kiểu dữ liệu số để lưu trữ các giá trị ngày và giờ dưới dạng dấu thời gian UNIX [thời gian Epoch] - một số giây kể từ ngày 1 tháng 1 năm 1970 00. 00. 00 UTC. Điều này sẽ cho phép chúng tôi sắp xếp và truy vấn các mục theo ngày và giờ
MongoDB
Trong MongoDB, bên trong, ngày tháng được lưu trữ dưới dạng số nguyên có chữ ký 64 bit đại diện cho một số mili giây kể từ kỷ nguyên Unix [1 tháng 1 năm 1970 00. 00. 00 UTC]. Các giá trị âm biểu thị các ngày trước kỷ nguyên Unix
Để chèn ngày vào Mongo shell, chúng ta có thể sử dụng đối tượng Date
const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
0Bạn có thể chuyển một chuỗi ISO 8601 hoặc một số mili giây kể từ kỷ nguyên Unix vào hàm tạo Ngày
const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
1Nếu bạn chỉ định chênh lệch múi giờ, ngày sẽ được chuyển thành UTC
const myDate = new Date['11 May 2021 18:30:01 UTC'];
console.log[myDate];
// Tue May 11 2021 21:30:01 GMT+0300 [Eastern European Summer Time]
console.log[myDate.getHours[]];
// 21, not 18 as you might have expected
2Phần kết luận
Cẩn thận khi làm việc với ngày và giờ. Luôn kiểm tra xem ngày bạn lưu trữ và làm việc có dựa trên múi giờ bạn mong đợi không. Đảm bảo rằng các môi trường bạn sử dụng để chạy các phần khác nhau của ứng dụng [e. g. , máy chủ web, cơ sở dữ liệu, v.v. ] có cấu hình múi giờ chính xác và nhất quán