JavaScript lấy ngày từ đâu?

JavaScript là ngôn ngữ lập trình nhẹ được sử dụng cho World Wide Web. Đối tượng JavaScript





Demo: Current Date



01 rất hữu ích để kiểm tra ngày giờ khách truy cập vào trang web của bạn

Hướ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

Tutorial on how to get Current Date and Time in JavaScript.

đ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





Demo: Current Date



02 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

javascript date object html

Đố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

  • 
    
    
    
    Demo: Current Date
    
    
    
    
    03 – Sử dụng biến hôm nay để hiển thị năm có 4 chữ số
  • 
    
    
    
    Demo: Current Date
    
    
    
    
    04 – Hiển thị tháng số. +1 chuyển đổi tháng từ kỹ thuật số (0-11) sang bình thường
  • 
    
    
    
    Demo: Current Date
    
    
    
    
    05 – Hiển thị số ngày trong tháng

javascript current date html

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



  • 
    
    
    
    Demo: Current Date
    
    
    
    
    06 – Đ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ờ
  • 
    
    
    
    Demo: Current Date
    
    
    
    
    0 – Hiển thị số phút hiện tại
  • 
    
    
    
    Demo: Current Date
    
    
    
    
    1 – Hiển thị số giây hiện tại

javascript current time html

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

javascript current date and time html

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ý

Thao tác ngày giờ nổi tiếng là khó. Các nhà phát triển gặp phải quy tắc múi giờ, giây nhảy vọt, sự khác biệt về định dạng dành riêng cho ngôn ngữ nên sử dụng các thư viện thao tác ngày và giờ phổ biến. Nhưng không cần suy nghĩ về cách chúng hoạt động chính xác, vẫn dễ dàng tạo ra đủ loại lỗi khó hiểu

Qua

Trừng phạt Jajodia

Punit là một kỹ sư phần mềm và doanh nhân đa năng. Anh ấy đã làm việc về dữ liệu lớn và mô phỏng 3D thời gian thực và là một chuyên gia về MEAN stack

CHIA SẺ

CHIA SẺ

Là một nhà phát triển phần mềm, bạn không thể thoát khỏi việc thao túng ngày tháng. Hầu hết mọi ứng dụng mà nhà phát triển xây dựng sẽ có một số thành phần mà ngày/giờ cần được lấy từ người dùng, được lưu trữ trong cơ sở dữ liệu và hiển thị lại cho người dùng

Hỏi bất kỳ lập trình viên nào về kinh nghiệm xử lý ngày và múi giờ của họ và họ có thể sẽ chia sẻ một số câu chuyện chiến tranh. Xử lý các trường ngày và giờ chắc chắn không phải là khoa học tên lửa nhưng thường có thể tẻ nhạt và dễ bị lỗi

Có hàng trăm bài viết về chủ đề này, tuy nhiên, hầu hết đều quá hàn lâm, tập trung vào các chi tiết nhỏ nhặt hoặc chúng quá chắp vá, cung cấp các đoạn mã ngắn mà không có nhiều giải thích kèm theo. Hướng dẫn chuyên sâu về thao tác DateTime này sẽ giúp bạn hiểu các khái niệm lập trình và các phương pháp hay nhất liên quan đến thời gian và ngày tháng mà không cần phải duyệt qua một biển thông tin về chủ đề này

Trong bài viết này, tôi sẽ giúp bạn suy nghĩ rõ ràng về các trường ngày và giờ, đồng thời đề xuất một số phương pháp hay nhất có thể giúp bạn tránh được địa ngục ngày/giờ. Ở đây chúng ta sẽ khám phá một số khái niệm chính cần thiết để thao tác chính xác các giá trị ngày và giờ, các định dạng thuận tiện cho việc lưu trữ các giá trị DateTime và chuyển chúng qua API, v.v.

Đối với những người mới bắt đầu, câu trả lời đúng cho mã sản xuất hầu như luôn là sử dụng một thư viện phù hợp thay vì tạo mã của riêng bạn. Những khó khăn tiềm ẩn với phép tính DateTime được thảo luận trong bài viết này chỉ là phần nổi của tảng băng trôi, nhưng chúng vẫn hữu ích khi biết về việc có hoặc không có thư viện

Thư viện DateTime Trợ giúp nếu bạn hiểu đúng về chúng

Thư viện ngày giúp theo nhiều cách để làm cho cuộc sống của bạn dễ dàng hơn. Chúng đơn giản hóa rất nhiều việc phân tích ngày tháng, các phép toán logic và số học ngày tháng cũng như định dạng ngày tháng. Bạn có thể tìm thấy một thư viện ngày đáng tin cậy cho cả giao diện người dùng và giao diện người dùng để thực hiện hầu hết các công việc nặng nhọc cho bạn

Tuy nhiên, chúng ta thường sử dụng thư viện ngày tháng mà không suy nghĩ về cách thức hoạt động của ngày/giờ. Ngày/giờ là một khái niệm phức tạp. Các lỗi phát sinh do hiểu sai về nó có thể cực kỳ khó hiểu và khó khắc phục, ngay cả khi có sự trợ giúp của thư viện ngày tháng. Là một lập trình viên, bạn cần hiểu những kiến ​​thức cơ bản và có thể đánh giá đúng các vấn đề mà thư viện ngày tháng giải quyết để tận dụng tối đa chúng

Ngoài ra, thư viện ngày/giờ chỉ có thể đưa bạn đến nay. Tất cả các thư viện ngày hoạt động bằng cách cấp cho bạn quyền truy cập vào các cấu trúc dữ liệu thuận tiện để biểu thị Ngày giờ. Nếu bạn đang gửi và nhận dữ liệu thông qua API REST, cuối cùng bạn sẽ cần chuyển đổi ngày thành chuỗi và ngược lại vì JSON không có cấu trúc dữ liệu riêng để biểu thị DateTime. Các khái niệm mà tôi đã phác thảo ở đây sẽ giúp bạn tránh được một số vấn đề phổ biến có thể xảy ra khi thực hiện các chuyển đổi từ ngày này sang chuỗi khác và từ chuỗi này sang ngày khác

Ghi chú. Mặc dù tôi đã sử dụng JavaScript làm ngôn ngữ lập trình được thảo luận trong bài viết này, nhưng đây là những khái niệm chung được áp dụng ở mức độ lớn cho hầu như tất cả các ngôn ngữ lập trình và thư viện ngày tháng của chúng. Vì vậy, ngay cả khi bạn chưa từng viết một dòng JavaScript nào trước đây, hãy tiếp tục đọc vì tôi hầu như không cho rằng có bất kỳ kiến ​​thức nào về JavaScript trước đó trong bài viết

Chuẩn hóa thời gian

DateTime là một thời điểm rất cụ thể. Hãy nghĩ về điều này. Khi tôi viết nguệch ngoạc bài viết này, đồng hồ trên máy tính xách tay của tôi hiển thị ngày 21 tháng 7 1. 29 giờ tối. Đây là cái mà chúng tôi gọi là “giờ địa phương”, thời gian mà tôi nhìn thấy trên đồng hồ treo tường xung quanh mình và trên đồng hồ đeo tay của tôi

Cho hoặc mất vài phút, nếu tôi hẹn bạn tôi ở một quán cà phê gần đó lúc 3 giờ. 00 PM, tôi có thể mong gặp cô ấy ở đó vào khoảng thời gian đó. Tương tự như vậy, sẽ không có bất kỳ sự nhầm lẫn nào nếu thay vào đó tôi nói, chẳng hạn như “hãy gặp nhau sau một tiếng rưỡi nữa. ” Chúng tôi thường nói về thời gian theo cách này với những người sống trong cùng thành phố hoặc múi giờ

Hãy nghĩ về một kịch bản khác. Tôi muốn nói với một người bạn sống ở Uppsala, Thụy Điển rằng tôi muốn nói chuyện với anh ấy lúc 5 giờ chiều. Tôi gửi cho anh ấy một tin nhắn, “Này Anton, hãy nói chuyện lúc 5 giờ chiều. ” Tôi ngay lập tức nhận được câu trả lời, “Thời gian của bạn hay thời gian của tôi?”

Anton nói với tôi rằng anh ấy sống ở múi giờ Trung Âu là UTC+01. 00. Tôi sống ở UTC+05. 45. Điều này có nghĩa là khi ở nơi tôi sống là 5 giờ chiều thì đó là 5 giờ chiều - 05. 45 = 11. 15 AM UTC, có nghĩa là 11. 15 giờ sáng UTC + 01. 00 = 12. 15 giờ chiều ở Uppsala, hoàn hảo cho cả hai chúng tôi

Ngoài ra, hãy lưu ý về sự khác biệt giữa múi giờ (Giờ Trung Âu) và độ lệch múi giờ (UTC+05. 45). Các quốc gia cũng có thể quyết định thay đổi độ lệch múi giờ của họ đối với Giờ tiết kiệm ánh sáng ban ngày vì lý do chính trị. Hầu như mỗi năm đều có sự thay đổi đối với các quy tắc ở ít nhất một quốc gia, nghĩa là bất kỳ mã nào có các quy tắc này đều phải được cập nhật—bạn nên xem xét cơ sở mã của mình phụ thuộc vào điều này cho từng cấp ứng dụng của bạn

Đó là một lý do chính đáng khác mà chúng tôi khuyên rằng chỉ giao diện người dùng mới xử lý các múi giờ trong hầu hết các trường hợp. Khi không, điều gì sẽ xảy ra khi các quy tắc mà công cụ cơ sở dữ liệu của bạn sử dụng không khớp với các quy tắc của mặt trước hoặc mặt sau của bạn?

Vấn đề quản lý hai phiên bản thời gian khác nhau, liên quan đến người dùng và liên quan đến tiêu chuẩn được chấp nhận rộng rãi, rất khó, thậm chí còn khó hơn trong thế giới lập trình nơi độ chính xác là chìa khóa và thậm chí một giây cũng có thể tạo ra sự khác biệt lớn. Bước đầu tiên để giải quyết những vấn đề này là lưu trữ DateTime theo UTC

Chuẩn hóa định dạng

Chuẩn hóa thời gian thật tuyệt vời vì tôi chỉ cần lưu trữ thời gian UTC và miễn là tôi biết múi giờ của người dùng, tôi luôn có thể chuyển đổi sang thời gian của họ. Ngược lại, nếu tôi biết giờ địa phương của người dùng và biết múi giờ của họ, tôi có thể chuyển đổi giờ đó thành UTC

Nhưng ngày và giờ có thể được chỉ định ở nhiều định dạng khác nhau. Đối với ngày, bạn có thể viết “Jul 30th” hoặc “30 July” hoặc “7/30” (hoặc 30/7, tùy thuộc vào nơi bạn sống). Tạm thời, bạn có thể viết “9. 30 giờ tối” hoặc “21 giờ 30”

Các nhà khoa học trên toàn thế giới đã cùng nhau giải quyết vấn đề này và quyết định một định dạng để mô tả thời gian mà các lập trình viên thực sự thích vì nó ngắn và chính xác. Chúng tôi muốn gọi nó là “Định dạng ngày ISO”, đây là phiên bản đơn giản hóa của định dạng mở rộng ISO-8601 và nó trông như thế này

An image showing a simplified version of the ISO-8601 extended format called the ISO date format.

Cho 00. 00 hoặc UTC, thay vào đó, chúng tôi sử dụng “Z”, có nghĩa là giờ Zulu, một tên gọi khác của UTC

Thao tác ngày tháng và số học trong JavaScript

Trước khi bắt đầu với các phương pháp hay nhất, chúng ta sẽ tìm hiểu về thao tác ngày tháng bằng JavaScript để nắm bắt cú pháp và các khái niệm chung. Mặc dù chúng tôi sử dụng JavaScript, nhưng bạn có thể dễ dàng điều chỉnh thông tin này sang ngôn ngữ lập trình yêu thích của mình

Chúng tôi sẽ sử dụng số học ngày tháng để giải quyết các vấn đề phổ biến liên quan đến ngày tháng mà hầu hết các nhà phát triển đều gặp phải

Mục tiêu của tôi là giúp bạn thoải mái tạo đối tượng ngày tháng từ một chuỗi và trích xuất các thành phần từ một chuỗi. Đây là điều mà thư viện ngày tháng có thể giúp bạn, nhưng tốt hơn hết bạn nên hiểu cách nó được thực hiện đằng sau hậu trường

Khi chúng ta đã hiểu rõ về ngày/giờ, thì sẽ dễ dàng hơn để suy nghĩ về các vấn đề mà chúng ta gặp phải, rút ​​ra các phương pháp hay nhất và tiến lên phía trước. Nếu bạn muốn bỏ qua các phương pháp hay nhất, vui lòng làm như vậy, nhưng tôi thực sự khuyên bạn ít nhất nên đọc lướt qua phần số học ngày tháng bên dưới

Đối tượng ngày JavaScript

Ngôn ngữ lập trình chứa các cấu trúc hữu ích giúp cuộc sống của chúng ta dễ dàng hơn. Đối tượng JavaScript

const date = new Date(2016, 6, 27, 13, 30, 0);
9 là một thứ như vậy. Nó cung cấp các phương thức thuận tiện để lấy ngày và giờ hiện tại, lưu trữ ngày trong một biến, thực hiện phép tính ngày và định dạng ngày dựa trên ngôn ngữ của người dùng

Do sự khác biệt giữa việc triển khai trình duyệt và việc xử lý Giờ tiết kiệm ánh sáng ban ngày (DST) không chính xác, việc tùy thuộc vào đối tượng Ngày cho các ứng dụng quan trọng không được khuyến nghị và có lẽ bạn nên sử dụng thư viện DateTime như. (Dù bạn sử dụng cái gì, hãy tránh Khoảnh khắc nổi tiếng một thời. js—thường được gọi đơn giản là

const date = new Date("2016-07-27T07:45:00Z");
0, như nó xuất hiện trong mã—vì nó hiện không được dùng nữa. )

Nhưng với mục đích giáo dục, chúng ta sẽ sử dụng các phương thức mà đối tượng Date() cung cấp để tìm hiểu cách JavaScript xử lý DateTime

Nhận ngày hiện tại

________số 8

Nếu bạn không truyền bất cứ thứ gì vào hàm tạo Ngày, đối tượng ngày được trả về chứa ngày và giờ hiện tại

Sau đó, bạn có thể định dạng nó để chỉ trích xuất phần ngày tháng như sau

const currentDate = new Date();

const currentDayOfMonth = currentDate.getDate();
const currentMonth = currentDate.getMonth(); // Be careful! January is 0, not 1
const currentYear = currentDate.getFullYear();

const dateString = currentDayOfMonth + "-" + (currentMonth + 1) + "-" + currentYear;
// "27-11-2020"

Ghi chú. Cạm bẫy “Tháng Giêng là 0” phổ biến nhưng không phổ biến. Cần kiểm tra kỹ tài liệu của bất kỳ ngôn ngữ nào (hoặc định dạng cấu hình. e. g. , cron đáng chú ý là dựa trên 1) trước khi bạn bắt đầu sử dụng nó

Lấy dấu thời gian hiện tại

Thay vào đó, nếu bạn muốn lấy dấu thời gian hiện tại, bạn có thể tạo một đối tượng Date mới và sử dụng phương thức getTime()





Demo: Current Date



0

Trong JavaScript, dấu thời gian là số mili giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970

Nếu bạn không có ý định hỗ trợ const date = new Date("2016-07-27T07:45:00Z"); 1 để trực tiếp lấy dấu thời gian mà không phải tạo đối tượng Ngày mới

Phân tích một ngày

Chuyển đổi một chuỗi thành một đối tượng ngày JavaScript được thực hiện theo nhiều cách khác nhau

Hàm tạo của đối tượng Date chấp nhận nhiều định dạng ngày khác nhau





Demo: Current Date



2

Lưu ý rằng bạn không cần bao gồm ngày trong tuần vì JS có thể xác định ngày trong tuần cho bất kỳ ngày nào

Bạn cũng có thể chuyển năm, tháng, ngày, giờ, phút và giây dưới dạng các đối số riêng biệt

const date = new Date(2016, 6, 27, 13, 30, 0);

Tất nhiên, bạn luôn có thể sử dụng định dạng ngày ISO

const date = new Date("2016-07-27T07:45:00Z");

Tuy nhiên, bạn có thể gặp rắc rối khi không cung cấp múi giờ một cách rõ ràng





Demo: Current Date



5

Một trong hai sẽ cung cấp cho bạn 25 Tháng bảy 2016 00. 00. 00 giờ địa phương

Nếu bạn sử dụng định dạng ISO, ngay cả khi bạn chỉ cung cấp ngày chứ không phải thời gian và múi giờ, nó sẽ tự động chấp nhận múi giờ là UTC

Điều này có nghĩa rằng





Demo: Current Date



6

Định dạng một ngày

May mắn thay, JavaScript hiện đại có một số chức năng quốc tế hóa thuận tiện được tích hợp trong không gian tên

const date = new Date("2016-07-27T07:45:00Z");
2 tiêu chuẩn giúp định dạng ngày tháng trở thành một thao tác đơn giản

Đối với điều này, chúng ta sẽ cần hai đối tượng. một

const date = new Date(2016, 6, 27, 13, 30, 0);
9 và một
const date = new Date("2016-07-27T07:45:00Z");
4, được khởi tạo với tùy chọn đầu ra của chúng tôi. Giả sử chúng tôi muốn sử dụng định dạng của Mỹ (M/D/YYYY), điều này sẽ giống như





Demo: Current Date



0

Thay vào đó, nếu chúng tôi muốn định dạng tiếng Hà Lan (D/M/YYYY), chúng tôi sẽ chỉ chuyển một mã văn hóa khác cho hàm tạo

const date = new Date("2016-07-27T07:45:00Z");
5





Demo: Current Date



2

Hoặc dạng dài hơn của định dạng Mỹ, với tên tháng được đánh vần

const currentDate = new Date();

const currentDayOfMonth = currentDate.getDate();
const currentMonth = currentDate.getMonth(); // Be careful! January is 0, not 1
const currentYear = currentDate.getFullYear();

const dateString = currentDayOfMonth + "-" + (currentMonth + 1) + "-" + currentYear;
// "27-11-2020"
0

Bây giờ, nếu chúng ta muốn một định dạng thứ tự phù hợp vào ngày trong tháng—tức là, “ngày 14” thay vì chỉ “14”—điều này rất tiếc cần một chút giải pháp thay thế, bởi vì các giá trị hợp lệ duy nhất của

const date = new Date("2016-07-27T07:45:00Z");
6 tại thời điểm viết bài này là
const date = new Date("2016-07-27T07:45:00Z");
7 hoặc . Mượn phiên bản mã Mathias Bynens của Flavio Copes để tận dụng một phần khác của
const date = new Date("2016-07-27T07:45:00Z");
2 cho việc này, chúng tôi có thể tùy chỉnh đầu ra ngày trong tháng thông qua




Demo: Current Date



50

const currentDate = new Date();

const currentDayOfMonth = currentDate.getDate();
const currentMonth = currentDate.getMonth(); // Be careful! January is 0, not 1
const currentYear = currentDate.getFullYear();

const dateString = currentDayOfMonth + "-" + (currentMonth + 1) + "-" + currentYear;
// "27-11-2020"
1

Thật không may,





Demo: Current Date



51 hoàn toàn không được Internet Explorer (IE) hỗ trợ khi viết bài này, nhưng tất cả các máy tính để bàn, thiết bị di động và phụ trợ khác (tôi. e. Nút. js) có hỗ trợ. Đối với những người cần hỗ trợ IE và hoàn toàn cần các thứ tự, chú thích bên dưới (hoặc tốt hơn là thư viện ngày thích hợp) cung cấp câu trả lời

Nếu bạn cần hỗ trợ các trình duyệt cũ hơn như IE trước phiên bản 11, thì việc định dạng ngày tháng trong JavaScript sẽ khó khăn hơn vì không có chức năng định dạng ngày tháng tiêu chuẩn như





Demo: Current Date



52 trong Python hoặc PHP

Ví dụ, trong PHP, hàm





Demo: Current Date



53 cung cấp cho bạn




Demo: Current Date



54

Bạn có thể sử dụng một tổ hợp các chữ cái khác trước





Demo: Current Date



55 để lấy ngày ở các định dạng khác nhau. (Cẩn thận, không phải ngôn ngữ nào cũng gán nghĩa giống nhau cho từng chữ cái—đặc biệt, 'M' và 'm' có thể hoán đổi cho nhau trong nhiều phút và nhiều tháng. )

Nếu bạn chắc chắn về định dạng mình muốn sử dụng, tốt nhất là trích xuất các bit riêng lẻ bằng cách sử dụng các hàm JavaScript mà chúng tôi đã trình bày ở trên và tự tạo một chuỗi

const currentDate = new Date();

const currentDayOfMonth = currentDate.getDate();
const currentMonth = currentDate.getMonth(); // Be careful! January is 0, not 1
const currentYear = currentDate.getFullYear();

const dateString = currentDayOfMonth + "-" + (currentMonth + 1) + "-" + currentYear;
// "27-11-2020"
2

Chúng tôi có thể lấy ngày ở định dạng MM/DD/YYYY như

const currentDate = new Date();

const currentDayOfMonth = currentDate.getDate();
const currentMonth = currentDate.getMonth(); // Be careful! January is 0, not 1
const currentYear = currentDate.getFullYear();

const dateString = currentDayOfMonth + "-" + (currentMonth + 1) + "-" + currentYear;
// "27-11-2020"
3

Vấn đề với giải pháp này là nó có thể đưa ra độ dài không nhất quán cho các ngày vì một số tháng và ngày trong tháng là một chữ số và một số khác là hai chữ số. Điều này có thể có vấn đề, ví dụ: nếu bạn đang hiển thị ngày trong cột của bảng vì ngày không thẳng hàng

Chúng ta có thể giải quyết vấn đề này bằng cách sử dụng hàm “pad” có thêm số 0 ở đầu

const currentDate = new Date();

const currentDayOfMonth = currentDate.getDate();
const currentMonth = currentDate.getMonth(); // Be careful! January is 0, not 1
const currentYear = currentDate.getFullYear();

const dateString = currentDayOfMonth + "-" + (currentMonth + 1) + "-" + currentYear;
// "27-11-2020"
4

Bây giờ, chúng tôi nhận được ngày chính xác ở định dạng MM/DD/YYYY bằng cách sử dụng

const currentDate = new Date();

const currentDayOfMonth = currentDate.getDate();
const currentMonth = currentDate.getMonth(); // Be careful! January is 0, not 1
const currentYear = currentDate.getFullYear();

const dateString = currentDayOfMonth + "-" + (currentMonth + 1) + "-" + currentYear;
// "27-11-2020"
5

Thay vào đó, nếu chúng tôi muốn DD-MM-YYYY, quá trình này tương tự

const currentDate = new Date();

const currentDayOfMonth = currentDate.getDate();
const currentMonth = currentDate.getMonth(); // Be careful! January is 0, not 1
const currentYear = currentDate.getFullYear();

const dateString = currentDayOfMonth + "-" + (currentMonth + 1) + "-" + currentYear;
// "27-11-2020"
6

Hãy bắt đầu và thử in ngày ở định dạng “Tháng Ngày, Năm”. Chúng tôi sẽ cần ánh xạ các chỉ mục tháng tới các tên

const currentDate = new Date();

const currentDayOfMonth = currentDate.getDate();
const currentMonth = currentDate.getMonth(); // Be careful! January is 0, not 1
const currentYear = currentDate.getFullYear();

const dateString = currentDayOfMonth + "-" + (currentMonth + 1) + "-" + currentYear;
// "27-11-2020"
7

Một số người thích hiển thị ngày là ngày 1 tháng 1 năm 2013. Không thành vấn đề, tất cả những gì chúng ta cần là một hàm trợ giúp





Demo: Current Date



56 trả về thứ nhất cho 1, thứ 12 cho 12 và thứ 103 cho 103, v.v. , và phần còn lại là đơn giản

const currentDate = new Date();

const currentDayOfMonth = currentDate.getDate();
const currentMonth = currentDate.getMonth(); // Be careful! January is 0, not 1
const currentYear = currentDate.getFullYear();

const dateString = currentDayOfMonth + "-" + (currentMonth + 1) + "-" + currentYear;
// "27-11-2020"
8

Thật dễ dàng để xác định ngày trong tuần từ đối tượng ngày, vì vậy hãy thêm nó vào

const currentDate = new Date();

const currentDayOfMonth = currentDate.getDate();
const currentMonth = currentDate.getMonth(); // Be careful! January is 0, not 1
const currentYear = currentDate.getFullYear();

const dateString = currentDayOfMonth + "-" + (currentMonth + 1) + "-" + currentYear;
// "27-11-2020"
9

Điểm quan trọng hơn ở đây là, khi bạn đã lấy được các số được trích xuất từ ​​ngày, định dạng chủ yếu liên quan đến chuỗi

Thay đổi định dạng ngày

Một khi bạn biết cách phân tích một ngày và định dạng nó, việc thay đổi một ngày từ định dạng này sang định dạng khác chỉ là vấn đề kết hợp cả hai.

Ví dụ: nếu bạn có một ngày ở định dạng ngày 21 tháng 7 năm 2013 và muốn thay đổi định dạng thành ngày 21-07-2013, bạn có thể thực hiện như sau





Demo: Current Date



00

Sử dụng các chức năng bản địa hóa đối tượng ngày của JavaScript

Các phương thức định dạng ngày mà chúng ta đã thảo luận ở trên sẽ hoạt động trong hầu hết các ứng dụng, nhưng nếu bạn thực sự muốn bản địa hóa định dạng ngày, tôi khuyên bạn nên sử dụng phương thức





Demo: Current Date



58 của đối tượng
const date = new Date(2016, 6, 27, 13, 30, 0);
9





Demo: Current Date



01

…cung cấp cho chúng tôi một cái gì đó như





Demo: Current Date



59

Thay đổi ngôn ngữ thành 'en-US' sẽ cho "26 tháng 7 năm 2016" để thay thế. Lưu ý cách định dạng đã thay đổi, nhưng các tùy chọn hiển thị vẫn được giữ nguyên—một tính năng rất hữu ích. Như đã trình bày trong phần trước, kỹ thuật dựa trên

const date = new Date("2016-07-27T07:45:00Z");
4 mới hơn hoạt động rất giống với kỹ thuật này, nhưng cho phép bạn sử dụng lại một đối tượng định dạng để bạn chỉ cần đặt các tùy chọn một lần

Với





Demo: Current Date



58, thói quen tốt là luôn chuyển các tùy chọn định dạng, ngay cả khi đầu ra trông ổn trên máy tính của bạn. Điều này có thể bảo vệ giao diện người dùng khỏi bị phá vỡ ở các ngôn ngữ không mong muốn với tên tháng thực sự dài hoặc trông khó xử vì tên ngắn

Thay vào đó, nếu tôi muốn cả tháng “Tháng 7”, tất cả những gì tôi làm là thay đổi tham số tháng trong các tùy chọn thành “dài hạn”. JavaScript xử lý mọi thứ cho tôi. Đối với en-US, bây giờ tôi nhận được ngày 26 tháng 7 năm 2016

Ghi chú. Nếu bạn muốn trình duyệt tự động sử dụng ngôn ngữ của người dùng, bạn có thể chuyển "không xác định" làm tham số đầu tiên

Nếu bạn muốn hiển thị phiên bản số của ngày và không muốn phiền phức với MM/DD/YYYY so với. DD/MM/YYYY cho các ngôn ngữ khác nhau, tôi đề xuất giải pháp đơn giản sau





Demo: Current Date



02

Trên máy tính của tôi, kết quả này là





Demo: Current Date



62. Nếu bạn muốn chắc chắn rằng tháng và ngày có hai chữ số, chỉ cần thay đổi các tùy chọn





Demo: Current Date



03

Kết quả đầu ra này





Demo: Current Date



63. Chỉ là những gì chúng tôi muốn

Bạn cũng có thể sử dụng một số hàm liên quan khác để bản địa hóa cách hiển thị cả ngày và giờ

CodeOutputDescription____104"4. 21. 38 AM"Chỉ hiển thị phiên bản bản địa hóa của thời gian





Demo: Current Date



05"04. 21. 38 AM"Hiển thị thời gian bản địa hóa dựa trên các tùy chọn được cung cấp




Demo: Current Date



06"22/7/2016, 4. 21. 38 AM"Hiển thị ngày và giờ cho ngôn ngữ của người dùng




Demo: Current Date



07"22/7/2016, 04. 21 giờ sáng"Hiển thị ngày và giờ được bản địa hóa dựa trên các tùy chọn được cung cấp

Tính toán ngày và giờ tương đối

Dưới đây là ví dụ về việc thêm 20 ngày vào Ngày JavaScript (tôi. e. , tìm ra ngày 20 ngày sau một ngày đã biết)





Demo: Current Date



08

Đối tượng ngày ban đầu hiện đại diện cho một ngày 20 ngày sau ngày 20 tháng 7 và





Demo: Current Date



64 chứa một chuỗi được bản địa hóa đại diện cho ngày đó. Trên trình duyệt của tôi,




Demo: Current Date



64 chứa “8/9/2016, 3. 00. 00 giờ tối”

Để tính toán các mốc thời gian tương đối với chênh lệch chính xác hơn so với cả ngày, bạn có thể sử dụng





Demo: Current Date



66 và




Demo: Current Date



67 để làm việc với các số nguyên biểu thị số mili giây kể từ một kỷ nguyên nhất định—cụ thể là ngày 1 tháng 1 năm 1970. Ví dụ: nếu bạn muốn biết bây giờ là 17 giờ sau khi nào





Demo: Current Date



09

So sánh ngày

Cũng như mọi thứ khác liên quan đến ngày tháng, việc so sánh ngày tháng có những vấn đề riêng

First, we need to create date objects. Fortunately, <, >, <=, and >= all work. So comparing July 19, 2014 and July 18, 2014 is as easy as:





Demo: Current Date



20

Kiểm tra sự bằng nhau phức tạp hơn, vì hai đối tượng ngày đại diện cho cùng một ngày vẫn là hai đối tượng ngày khác nhau và sẽ không bằng nhau. So sánh các chuỗi ngày là một ý tưởng tồi bởi vì, ví dụ: “20 tháng 7 năm 2014” và “20 tháng 7 năm 2014” biểu thị cùng một ngày nhưng có các biểu diễn chuỗi khác nhau. Đoạn trích dưới đây minh họa điểm đầu tiên





Demo: Current Date



21

Điều này sẽ xuất ra





Demo: Current Date



68

Trường hợp cụ thể này có thể được khắc phục bằng cách so sánh các số nguyên tương đương của các ngày (dấu thời gian của chúng) như sau





Demo: Current Date



22

Tôi đã thấy ví dụ này ở nhiều nơi, nhưng tôi không thích nó vì bạn không thường tạo một đối tượng ngày tháng từ một đối tượng ngày tháng khác. Vì vậy, tôi cảm thấy rằng ví dụ này chỉ quan trọng từ quan điểm học thuật. Ngoài ra, điều này yêu cầu cả hai đối tượng Ngày phải đề cập đến cùng một giây, trong khi bạn có thể chỉ muốn biết liệu chúng có đề cập đến cùng ngày, giờ hoặc phút hay không

Hãy xem xét một ví dụ thực tế hơn. Bạn đang cố so sánh xem ngày sinh mà người dùng đã nhập có giống với ngày may mắn mà bạn nhận được từ API hay không





Demo: Current Date



23

Cả hai đại diện cho cùng một ngày nhưng tiếc là người dùng của bạn sẽ không nhận được triệu đô la

Đây là vấn đề. JavaScript luôn coi múi giờ là múi giờ mà trình duyệt cung cấp trừ khi có quy định rõ ràng khác

Điều này có nghĩa là, đối với tôi,





Demo: Current Date



69 sẽ tạo ra một ngày 1989-12-20T00. 00. 00+5. 45 hoặc 1989-12-19T18. 15. 00Z không giống với 1989-12-20T00. 00. 00Z về mặt dấu thời gian

Không thể chỉ thay đổi múi giờ của một đối tượng ngày hiện có, vì vậy mục tiêu của chúng tôi bây giờ là tạo một đối tượng ngày mới nhưng với UTC thay vì múi giờ địa phương

Chúng tôi sẽ bỏ qua múi giờ của người dùng và sử dụng UTC trong khi tạo đối tượng ngày. Có hai cách để làm điều đó

  1. Tạo chuỗi ngày có định dạng ISO từ ngày người dùng nhập và sử dụng nó để tạo đối tượng Ngày. Sử dụng định dạng ngày ISO hợp lệ để tạo đối tượng Ngày trong khi làm rõ ý định của UTC so với địa phương




Demo: Current Date



24

Điều này cũng hoạt động nếu bạn không chỉ định thời gian vì thời gian đó sẽ mặc định là nửa đêm (tôi. e. , 00. 00. 00Z)





Demo: Current Date



25

Nhớ. Nếu hàm tạo ngày được truyền một chuỗi ở định dạng ngày ISO chính xác là YYYY-MM-DD, nó sẽ tự động giả định UTC

  1. JavaScript cung cấp một Ngày gọn gàng. Hàm UTC() mà bạn có thể sử dụng để lấy dấu thời gian UTC của một ngày. Chúng tôi trích xuất các thành phần từ ngày và chuyển chúng vào hàm




Demo: Current Date



26

Tìm sự khác biệt giữa hai ngày

Một kịch bản phổ biến bạn sẽ gặp là tìm sự khác biệt giữa hai ngày

Chúng tôi thảo luận về hai trường hợp sử dụng

Tìm số ngày giữa hai ngày

Chuyển đổi cả hai ngày thành dấu thời gian UTC, tìm sự khác biệt tính bằng mili giây và tìm số ngày tương đương





Demo: Current Date



27

Tìm tuổi của người dùng từ ngày sinh của họ





Demo: Current Date



28

Ghi chú. Chúng tôi có định dạng không chuẩn. Đọc tài liệu API để xác định xem điều này có nghĩa là ngày 12 tháng 10 hay ngày 10 tháng 12. Thay đổi định dạng ISO cho phù hợp





Demo: Current Date



29

Tôi biết có nhiều cách ngắn gọn hơn để viết mã này nhưng tôi thích viết theo cách này vì tính logic rõ ràng tuyệt đối

Những gợi ý để tránh địa ngục hẹn hò

Bây giờ chúng tôi cảm thấy thoải mái với số học ngày tháng, chúng tôi có thể hiểu các phương pháp hay nhất để làm theo và lý do để làm theo chúng

Nhận DateTime từ người dùng

Nếu bạn đang lấy ngày và giờ từ người dùng, rất có thể bạn đang tìm kiếm DateTime cục bộ của họ. Chúng ta đã thấy trong phần số học ngày tháng rằng hàm tạo

const date = new Date(2016, 6, 27, 13, 30, 0);
9 có thể chấp nhận ngày tháng theo một số cách khác nhau

Để loại bỏ bất kỳ sự nhầm lẫn nào, tôi luôn khuyên bạn nên tạo ngày bằng định dạng





Demo: Current Date



01 ngay cả khi bạn đã có ngày ở định dạng có thể phân tích cú pháp hợp lệ. Nếu tất cả các lập trình viên trong nhóm của bạn tuân theo quy tắc đơn giản này, thì việc duy trì mã trong thời gian dài sẽ cực kỳ dễ dàng vì nó rõ ràng nhất có thể với hàm tạo
const date = new Date(2016, 6, 27, 13, 30, 0);
9

Điều thú vị là bạn có thể sử dụng các biến thể cho phép bạn bỏ qua bất kỳ tham số nào trong bốn tham số cuối cùng nếu chúng bằng không; . e. ,





Demo: Current Date



03 giống như




Demo: Current Date



04 vì các tham số không xác định được mặc định bằng 0

Ví dụ: nếu bạn đang sử dụng bộ chọn ngày và giờ cung cấp cho bạn ngày 2012-10-12 và thời gian 12. 30, bạn có thể trích xuất các phần và tạo một đối tượng Date mới như sau

const date = new Date(2016, 6, 27, 13, 30, 0);
0

Cố gắng tránh tạo ngày từ chuỗi trừ khi nó ở định dạng ngày ISO. Thay vào đó, hãy sử dụng phương thức Ngày(năm, tháng, ngày, giờ, phút, giây, micro giây)

Chỉ lấy ngày

Nếu bạn chỉ nhận được ngày, chẳng hạn như ngày sinh của người dùng, thì tốt nhất là chuyển đổi định dạng sang định dạng ngày ISO hợp lệ để loại bỏ bất kỳ thông tin múi giờ nào có thể khiến ngày dịch chuyển tiến hoặc lùi khi chuyển đổi sang UTC. Ví dụ

const date = new Date(2016, 6, 27, 13, 30, 0);
1

Trong trường hợp bạn quên, nếu bạn tạo một đối tượng

const date = new Date(2016, 6, 27, 13, 30, 0);
9 với đầu vào ở định dạng ngày ISO hợp lệ (YYYY-MM-DD), nó sẽ mặc định là UTC thay vì mặc định là múi giờ của trình duyệt

Lưu trữ ngày

Luôn lưu trữ DateTime theo UTC. Luôn gửi chuỗi ngày ISO hoặc dấu thời gian đến phần cuối

Nhiều thế hệ lập trình viên máy tính đã nhận ra sự thật đơn giản này sau những trải nghiệm cay đắng khi cố gắng hiển thị giờ địa phương chính xác cho người dùng. Lưu trữ giờ địa phương ở mặt sau là một ý tưởng tồi, tốt hơn là để trình duyệt xử lý việc chuyển đổi sang giờ địa phương ở mặt trước

Ngoài ra, rõ ràng là bạn không bao giờ nên gửi một chuỗi Ngày giờ như “20 tháng 7 năm 1989 12. 10 giờ tối” đến cuối. Ngay cả khi bạn cũng gửi múi giờ, bạn đang tăng cường nỗ lực để các lập trình viên khác hiểu ý định của bạn và phân tích và lưu trữ ngày chính xác

Sử dụng các phương thức





Demo: Current Date



06 hoặc




Demo: Current Date



07 của đối tượng Date để chuyển đổi DateTime cục bộ thành UTC

const date = new Date(2016, 6, 27, 13, 30, 0);
2

Hiển thị Ngày và Giờ

  1. Nhận dấu thời gian hoặc ngày được định dạng ISO từ API REST
  2. Tạo một đối tượng
    const date = new Date(2016, 6, 27, 13, 30, 0);
    
    9
  3. Sử dụng các phương pháp
    
    
    
    
    Demo: Current Date
    
    
    
    
    09 hoặc
    
    
    
    
    Demo: Current Date
    
    
    
    
    58 và
    
    
    
    
    Demo: Current Date
    
    
    
    
    21 hoặc thư viện ngày để hiển thị giờ địa phương
const date = new Date(2016, 6, 27, 13, 30, 0);
3

Khi nào bạn cũng nên lưu trữ giờ địa phương?

“Đôi khi đó là nơi xảy ra một sự kiện và việc chuyển đổi sang một múi giờ duy nhất sẽ xóa sạch thông tin đó một cách không thể thay đổi được.

“Nếu bạn đang thực hiện một chương trình khuyến mãi tiếp thị và muốn biết khách hàng nào đã đặt hàng vào khoảng thời gian ăn trưa, thì một đơn hàng có vẻ như được đặt vào buổi trưa theo giờ GMT sẽ không hữu ích lắm khi nó thực sự được đặt trong bữa sáng ở New York. ”

Nếu bạn gặp phải tình huống như vậy, sẽ là khôn ngoan hơn nếu tiết kiệm thời gian địa phương. Như thường lệ, chúng tôi muốn tạo ngày ở định dạng ISO, nhưng trước tiên chúng tôi phải tìm phần bù múi giờ

Hàm





Demo: Current Date



22 của đối tượng Date cho chúng ta biết số phút khi được thêm vào một giờ địa phương nhất định sẽ cho thời gian UTC tương đương. Tôi đề nghị chuyển đổi nó thành (+-)hh. mm vì nó làm rõ ràng hơn rằng đó là phần bù múi giờ

const date = new Date(2016, 6, 27, 13, 30, 0);
4

Đối với múi giờ của tôi +05. 45, tôi nhận được -345, đây không chỉ là dấu hiệu ngược lại, mà một số như -345 có thể hoàn toàn khiến nhà phát triển back-end bối rối. Vì vậy, chúng tôi chuyển đổi này thành +05. 45

const date = new Date(2016, 6, 27, 13, 30, 0);
5

Bây giờ chúng tôi nhận phần còn lại của các giá trị và tạo một chuỗi ISO hợp lệ đại diện cho DateTime cục bộ

const date = new Date(2016, 6, 27, 13, 30, 0);
6

Nếu muốn, bạn có thể bọc UTC và ngày địa phương trong một đối tượng

const date = new Date(2016, 6, 27, 13, 30, 0);
7

Bây giờ, ở phần cuối, nếu bạn muốn tìm hiểu xem sự kiện có xảy ra trước buổi trưa theo giờ địa phương hay không, bạn có thể phân tích cú pháp ngày và chỉ cần sử dụng hàm





Demo: Current Date



23

const date = new Date(2016, 6, 27, 13, 30, 0);
8

Chúng tôi đã không sử dụng





Demo: Current Date



24 ở đây, nhưng chúng tôi vẫn lưu trữ nó vì chúng tôi có thể cần nó trong tương lai cho mục đích gỡ lỗi. Bạn thực sự chỉ có thể gửi chênh lệch múi giờ và chỉ thời gian UTC. Nhưng tôi cũng thích lưu trữ giờ địa phương vì cuối cùng bạn sẽ phải lưu trữ ngày trong cơ sở dữ liệu và việc lưu trữ riêng giờ địa phương cho phép bạn truy vấn trực tiếp dựa trên một trường thay vì phải thực hiện các phép tính để lấy ngày địa phương

Đôi khi, ngay cả khi đã lưu múi giờ địa phương, bạn vẫn muốn hiển thị ngày ở một múi giờ cụ thể. Ví dụ: thời gian cho các sự kiện có thể hợp lý hơn theo múi giờ của người dùng hiện tại nếu chúng là ảo hoặc theo múi giờ nơi chúng sẽ diễn ra trên thực tế nếu chúng không. Trong mọi trường hợp, bạn nên xem trước các giải pháp đã được thiết lập để định dạng với tên múi giờ rõ ràng

Cấu hình máy chủ và cơ sở dữ liệu

Luôn định cấu hình máy chủ và cơ sở dữ liệu của bạn để sử dụng múi giờ UTC. (Lưu ý rằng UTC và GMT không giống nhau—ví dụ: GMT có thể ngụ ý chuyển sang BST trong suốt mùa hè, trong khi UTC sẽ không bao giờ. )

Chúng tôi đã thấy mức độ khó khăn của chuyển đổi múi giờ, đặc biệt là khi chúng ngoài ý muốn. Luôn gửi Ngày giờ UTC và định cấu hình máy chủ của bạn ở múi giờ UTC có thể giúp cuộc sống của bạn dễ dàng hơn. Mã back-end của bạn sẽ đơn giản và gọn gàng hơn nhiều vì nó không phải thực hiện bất kỳ chuyển đổi múi giờ nào. Dữ liệu DateTime đến từ các máy chủ trên toàn thế giới có thể được so sánh và sắp xếp dễ dàng

Mã ở phía sau có thể giả sử múi giờ của máy chủ là UTC (nhưng vẫn phải kiểm tra tại chỗ để chắc chắn). Kiểm tra cấu hình đơn giản giúp tiết kiệm việc phải suy nghĩ và viết mã cho các chuyển đổi mỗi khi viết mã DateTime mới

Đã đến lúc xử lý ngày tháng tốt hơn

Thao tác ngày là một vấn đề khó khăn. Các khái niệm đằng sau các ví dụ thực tế trong bài viết này áp dụng ngoài JavaScript và chỉ là khởi đầu khi xử lý đúng dữ liệu DateTime và tính toán. Ngoài ra, mọi thư viện trợ giúp sẽ có nhiều sắc thái—điều này thậm chí đúng với hỗ trợ tiêu chuẩn chính thức cuối cùng{target=”_blank”} cho các loại hoạt động này

Điểm mấu chốt là. Sử dụng ISO ở mặt sau và để giao diện người dùng định dạng đúng mọi thứ cho người dùng. Các lập trình viên chuyên nghiệp sẽ nhận thức được một số sắc thái và sẽ (dứt khoát hơn) sử dụng các thư viện DateTime được hỗ trợ tốt ở cả mặt sau và mặt trước. Các chức năng tích hợp ở phía cơ sở dữ liệu lại là một câu chuyện khác, nhưng hy vọng bài viết này cũng cung cấp đủ thông tin cơ bản để đưa ra các quyết định sáng suốt hơn trong bối cảnh đó

Đọc thêm trên Blog Kỹ thuật Toptal

  • Cắt ngắn dấu thời gian. Câu chuyện ActiveRecord về Ruby on Rails
  • Cách xây dựng một nút. js Hệ thống xử lý lỗi
  • API REST của WordPress. Tính năng CMS thế hệ tiếp theo
  • Xác thực người dùng đầy đủ và kiểm soát truy cập. Hướng dẫn Laravel Passport, Pt. 1
  • Cách thực hiện xác thực JWT với Angular 6 SPA

thẻ

Ngày giờ thao tác JavaScript

Người làm việc tự do? Tìm công việc tiếp theo của bạn.

Việc làm Software Developer

Xem thông tin đầy đủ

Trừng phạt Jajodia

Kỹ sư phần mềm tự do

Thông tin về các Tác giả

Punit là một doanh nhân và nhà phát triển phần mềm mà tính linh hoạt là thế mạnh lớn nhất của anh ấy. Anh đã làm việc cho nhiều dự án khác nhau, từ mô phỏng 3D thời gian thực trên trình duyệt và phân tích dữ liệu lớn cho đến ứng dụng Windows. Gần đây, anh ấy cũng đã mạo hiểm tham gia đào tạo về MEAN stack

Thuê trừng phạt

Bình luận

Ruslan

Đó là bài viết hay về Date. Tất cả những người gặp phải vấn đề với việc chuyển đổi ngày tháng đều hiểu sự phức tạp và tinh tế. Nhưng trong các dự án thực tế, cần rất nhiều mã. Tất nhiên bạn có thể viết ngày mở rộng lớp của riêng bạn. Nhưng có những thư viện sẵn sàng được hoàn thiện và thử nghiệm qua nhiều năm trên nhiều dự án. Tôi chưa gặp các dự án, sẽ không sử dụng thời điểm. js. Tôi nghĩ đó cũng là một mặt mạnh của JS - sự giàu có của các thư viện tốt. Những khó khăn mà tác giả gặp phải khi làm việc với các thư viện DateTime là gì?

Ruslan

Đó là bài viết hay về Date. Tất cả những người gặp phải vấn đề với việc chuyển đổi ngày tháng đều hiểu sự phức tạp và tinh tế. Nhưng trong các dự án thực tế, cần rất nhiều mã. Tất nhiên bạn có thể viết ngày mở rộng lớp của riêng bạn. Nhưng có những thư viện sẵn sàng được hoàn thiện và thử nghiệm qua nhiều năm trên nhiều dự án. Tôi chưa gặp các dự án, sẽ không sử dụng thời điểm. js. Tôi nghĩ đó cũng là một mặt mạnh của JS - sự giàu có của các thư viện tốt. Những khó khăn mà tác giả gặp phải khi làm việc với các thư viện DateTime là gì?

Trừng phạt Jajodia

Tôi không đề xuất người đọc mở rộng đối tượng Ngày JavaScript hoặc tạo thư viện của riêng họ. tôi sử dụng khoảnh khắc. js bản thân mình. Nhưng như tôi đã đề cập trong bài viết, chúng ta thường sử dụng các thư viện ngày tháng mà không nghĩ xem ngày/giờ thực sự hoạt động như thế nào. Thông thường, các lỗi mà chúng tôi gặp phải không phải do bất kỳ điểm yếu cố hữu nào trong chính thư viện, mà do chúng tôi thiếu hiểu biết về những điều cơ bản. Vì vậy, tôi không gặp bất kỳ khó khăn nào với các thư viện DateTime, nhưng khi tạo ứng dụng tổng thể, có rất nhiều giao diện giữa "đối tượng" Ngày và "chuỗi" Ngày khiến tôi thường bị nhầm lẫn * lấy ngày từ người dùng * gửi . Một vấn đề cụ thể mà tôi gặp phải là khi tôi phải tạo một ứng dụng theo dõi lượng calo tiêu thụ của người dùng. Nếu người dùng đang đi du lịch, thì việc quản lý "thời gian" người dùng dùng bữa hóa ra lại là một vấn đề phức tạp. Khi tôi vật lộn với những đoạn mã chắp vá trên internet, tôi nhận ra rằng cần có một bài báo cho thấy bức tranh toàn cảnh hơn

Trừng phạt Jajodia

Tôi không đề xuất người đọc mở rộng đối tượng Ngày JavaScript hoặc tạo thư viện của riêng họ. tôi sử dụng khoảnh khắc. js bản thân mình. Nhưng như tôi đã đề cập trong bài viết, chúng ta thường sử dụng các thư viện ngày tháng mà không nghĩ xem ngày/giờ thực sự hoạt động như thế nào. Thông thường, các lỗi mà chúng tôi gặp phải không phải do bất kỳ điểm yếu cố hữu nào trong chính thư viện, mà do chúng tôi thiếu hiểu biết về những điều cơ bản. Vì vậy, tôi không gặp bất kỳ khó khăn nào với các thư viện DateTime, nhưng khi tạo ứng dụng tổng thể, có rất nhiều giao diện giữa "đối tượng" Ngày và "chuỗi" Ngày khiến tôi thường bị nhầm lẫn * lấy ngày từ người dùng * gửi . Một vấn đề cụ thể mà tôi gặp phải là khi tôi phải tạo một ứng dụng theo dõi lượng calo tiêu thụ của người dùng. Nếu người dùng đang đi du lịch, thì việc quản lý "thời gian" người dùng dùng bữa hóa ra lại là một vấn đề phức tạp. Khi tôi vật lộn với những đoạn mã chắp vá trên internet, tôi nhận ra rằng cần có một bài báo cho thấy bức tranh toàn cảnh hơn

Ashish Agrawal

trừng phạt. bạn hoàn toàn đúng, mọi lập trình viên đều đã hoặc đang đối mặt với vấn đề ngày tháng này trong sự nghiệp lập trình của mình. Bài viết của bạn thực sự rất hay, đủ cho lập trình viên không biết gì về chuyển đổi ngày tháng và thao tác. Công việc tuyệt vời trên bài viết này

Ashish Agrawal

trừng phạt. bạn hoàn toàn đúng, mọi lập trình viên đều đã hoặc đang đối mặt với vấn đề ngày tháng này trong sự nghiệp lập trình của mình. Bài viết của bạn thực sự rất hay, đủ cho lập trình viên không biết gì về chuyển đổi ngày tháng và thao tác. Công việc tuyệt vời trên bài viết này

ananthhh

Bài báo tuyệt vời. Thanh danh. 1 chỉnh sửa nhỏ "Chuyển đổi cả hai ngày thành dấu thời gian UTC, tìm sự khác biệt tính bằng micro giây và tìm ngày tương đương. " Trên thực tế, bạn đang tìm kiếm sự khác biệt tính bằng mili giây. Tôi cảm thấy rằng, linh hồn thực sự của bài viết (Phần phụ trợ nên có ngày giờ được định dạng ISO và giao diện người dùng nên quan tâm đến việc chuyển đổi định dạng ISO sang ngày giờ cục bộ thân thiện với người dùng) đã bị lạc vào quá nhiều đoạn mã. CHỈNH SỬA. "Luôn định cấu hình máy chủ và cơ sở dữ liệu của bạn để sử dụng múi giờ GMT/UTC. "Tôi nghĩ điều này là không cần thiết. Bởi vì máy chủ sẽ luôn nhận ngày được định dạng ISO

ananthhh

Bài báo tuyệt vời. Thanh danh. 1 chỉnh sửa nhỏ "Chuyển đổi cả hai ngày thành dấu thời gian UTC, tìm sự khác biệt tính bằng micro giây và tìm ngày tương đương. " Trên thực tế, bạn đang tìm kiếm sự khác biệt tính bằng mili giây. Tôi cảm thấy rằng, linh hồn thực sự của bài viết (Phần phụ trợ nên có ngày giờ được định dạng ISO và giao diện người dùng nên quan tâm đến việc chuyển đổi định dạng ISO sang ngày giờ cục bộ thân thiện với người dùng) đã bị lạc vào quá nhiều đoạn mã. CHỈNH SỬA. "Luôn định cấu hình máy chủ và cơ sở dữ liệu của bạn để sử dụng múi giờ GMT/UTC. "Tôi nghĩ điều này là không cần thiết. Bởi vì máy chủ sẽ luôn nhận ngày được định dạng ISO

Trừng phạt Jajodia

Cảm ơn vì những lời động viên Ashish. )

Trừng phạt Jajodia

Cảm ơn vì những lời động viên Ashish. )

Anit Shrestha Manandhar

đọc hay. Cảm ơn Punit

Anit Shrestha Manandhar

đọc hay. Cảm ơn Punit

Vadim

Cảm ơn vì bài viết hay, Punit. Làm việc với datetime luôn gây ra vấn đề (đối với tôi. Tôi nghĩ, tôi không ngoại lệ). Bài viết của bạn làm cho quá trình này không quá đau đớn. )

Vadim

Cảm ơn vì bài viết hay, Punit. Làm việc với datetime luôn gây ra vấn đề (đối với tôi. Tôi nghĩ, tôi không ngoại lệ). Bài viết của bạn làm cho quá trình này không quá đau đớn. )

Andy Hubert

Lỗi đánh máy nhỏ nhưng quan trọng. Bạn đã viết ". nếu bạn tạo một đối tượng Ngày với định dạng ngày ISO [NO SPACE] không hợp lệ. "nhưng có nghĩa là". nếu bạn tạo một đối tượng Ngày với đầu vào ở định dạng ngày ISO [VỚI KHÔNG GIAN] hợp lệ. "

Andy Hubert

Lỗi đánh máy nhỏ nhưng quan trọng. Bạn đã viết ". nếu bạn tạo một đối tượng Ngày với định dạng ngày ISO [NO SPACE] không hợp lệ. "nhưng có nghĩa là". nếu bạn tạo một đối tượng Ngày với đầu vào ở định dạng ngày ISO [VỚI KHÔNG GIAN] hợp lệ. "

millermedeiros

có một vài vấn đề với các ví dụ ở đây. TL;DR; . Tôi sẽ không đi qua tất cả mọi thứ nhưng một vài lưu ý. làm bất kỳ loại số học là dễ bị lỗi. Cách bạn tính `daysDiff` sẽ sai nếu có chuyển đổi DST giữa các ngày. Cách chính xác để thực hiện nó là sử dụng tổng số ngày trong tháng cho mỗi tháng ở giữa hoặc chỉ cần loại bỏ thông tin thời gian và sử dụng ngày UTC để tính toán sự khác biệt. mọi người hiểu sai (xem bình luận của tôi ở đây. https. //github. com/moment/moment/pull/571#issuecomment-16301301) Cũng có một lỗi trên Firefox đối với những thứ như `date. setDate(ngày. getDate() + 3)` liên quan đến DST. https. // bugzilla. mozilla. tổ chức/show_bug. cgi?id=1084434 (Safari và Chrome gặp vấn đề tương tự nhưng đã được khắc phục cách đây vài năm) `getTimeZoneOffset` là một loại vũ khí dùng chân; . - cách thích hợp là thực sự có múi giờ làm cài đặt người dùng và hoàn toàn không sử dụng độ lệch để tính toán (sử dụng một số thư viện/ngôn ngữ phụ trợ có bảng chuyển đổi múi giờ/DST cập nhật). - múi giờ ở giao diện người dùng khó (xem. http. // stackoverflow. com/a/37798868 và https. // vi. wikipedia. org/wiki/Tz_database) Vì vậy, nếu bạn muốn tránh các sự cố, tốt hơn hết bạn chỉ nên sử dụng các phương thức ngày UTC trong JavaScript; . 4, tháng. 10 năm. 2016}` và không sử dụng `new Date()`

millermedeiros

có một vài vấn đề với các ví dụ ở đây. TL;DR; . Tôi sẽ không đi qua tất cả mọi thứ nhưng một vài lưu ý. làm bất kỳ loại số học là dễ bị lỗi. Cách bạn tính `daysDiff` sẽ sai nếu có chuyển đổi DST giữa các ngày. Cách chính xác để thực hiện nó là sử dụng tổng số ngày trong tháng cho mỗi tháng ở giữa hoặc chỉ cần loại bỏ thông tin thời gian và sử dụng ngày UTC để tính toán sự khác biệt. mọi người hiểu sai (xem bình luận của tôi ở đây. https. //github. com/moment/moment/pull/571#issuecomment-16301301) Cũng có một lỗi trên Firefox đối với những thứ như `date. setDate(ngày. getDate() + 3)` liên quan đến DST. https. // bugzilla. mozilla. tổ chức/show_bug. cgi?id=1084434 (Safari và Chrome gặp vấn đề tương tự nhưng đã được khắc phục cách đây vài năm) `getTimeZoneOffset` là một loại vũ khí dùng chân; . - cách thích hợp là thực sự có múi giờ làm cài đặt người dùng và hoàn toàn không sử dụng độ lệch để tính toán (sử dụng một số thư viện/ngôn ngữ phụ trợ có bảng chuyển đổi múi giờ/DST cập nhật). - múi giờ ở giao diện người dùng khó (xem. http. // stackoverflow. com/a/37798868 và https. // vi. wikipedia. org/wiki/Tz_database) Vì vậy, nếu bạn muốn tránh các sự cố, tốt hơn hết bạn chỉ nên sử dụng các phương thức ngày UTC trong JavaScript; . 4, tháng. 10 năm. 2016}` và không sử dụng `new Date()`

Khaled Monsoor

đọc tốt. Nhưng, có một số vấn đề. ví dụ: đầu ra của dòng mã đầu tiên của bạn `var date = new Date("32 Tháng bảy 2016 15. 00. 00 GMT");` là sai, ít nhất là trên Chrome & Firefox mới nhất. Mặc dù nó chắc chắn không ném ngoại lệ, nhưng nó đặt `date` thành `Invalid Date`

Khaled Monsoor

đọc tốt. Nhưng, có một số vấn đề. ví dụ: đầu ra của dòng mã đầu tiên của bạn `var date = new Date("32 Tháng bảy 2016 15. 00. 00 GMT");` là sai, ít nhất là trên Chrome & Firefox mới nhất. Mặc dù nó chắc chắn không ném ngoại lệ, nhưng nó đặt `date` thành `Invalid Date`

juanvillegas

Tôi nghĩ ý của anh ấy khi định cấu hình máy chủ trong UTC là nếu không, nếu bạn định tạo một ngày mới, bạn sẽ phải thông báo rõ ràng cho ngôn ngữ phụ trợ của mình (tức là. php) rằng đó là UTC. Tương tự đối với cơ sở dữ liệu, tất cả các mốc thời gian được tạo tự động sẽ ở một thứ không phải là UTC, đây là một vấn đề

juanvillegas

Tôi nghĩ ý của anh ấy khi định cấu hình máy chủ trong UTC là nếu không, nếu bạn định tạo một ngày mới, bạn sẽ phải thông báo rõ ràng cho ngôn ngữ phụ trợ của mình (tức là. php) rằng đó là UTC. Tương tự đối với cơ sở dữ liệu, tất cả các mốc thời gian được tạo tự động sẽ ở một thứ không phải là UTC, đây là một vấn đề

Trừng phạt Jajodia

Cảm ơn bạn đã chia sẻ liên kết đến vấn đề tính toán chênh lệch ngày. Nó sẽ là một tài liệu tham khảo thêm cho độc giả. Số học ngày rất phức tạp, thậm chí còn phức tạp hơn khi có sự chuyển đổi DST. Khi viết bài, tôi đã phải cố tình loại bỏ DST để bài viết không quá dài. Rõ ràng là bạn sẽ cần sự trợ giúp của thư viện để đảm bảo rằng các phép tính DateTime của bạn hoạt động với độ chính xác hợp lý. Các phương pháp và đoạn mã tôi đã trình bày được cho là mang tính giáo dục hơn so với mã tiêu chuẩn ngành. Nếu bạn để ý, tôi chưa thực sự sử dụng giá trị tôi nhận được từ getTimeZoneOffset() trong ví dụ cần giờ địa phương và chỉ giữ nó dưới dạng siêu dữ liệu được sử dụng để gỡ lỗi. Một lần nữa, một bài viết có cùng độ dài với bài báo này có thể chỉ viết về điều này. Nếu bạn đang lưu trữ múi giờ dưới dạng cài đặt người dùng, thì các phương thức ngày UTC trong JavaScript sẽ đủ và có thể tránh hoàn toàn new Date()

Trừng phạt Jajodia

Cảm ơn bạn đã chia sẻ liên kết đến vấn đề tính toán chênh lệch ngày. Nó sẽ là một tài liệu tham khảo thêm cho độc giả. Số học ngày rất phức tạp, thậm chí còn phức tạp hơn khi có sự chuyển đổi DST. Khi viết bài, tôi đã phải cố tình loại bỏ DST để bài viết không quá dài. Rõ ràng là bạn sẽ cần sự trợ giúp của thư viện để đảm bảo rằng các phép tính DateTime của bạn hoạt động với độ chính xác hợp lý. Các phương pháp và đoạn mã tôi đã trình bày được cho là mang tính giáo dục hơn so với mã tiêu chuẩn ngành. Nếu bạn để ý, tôi chưa thực sự sử dụng giá trị tôi nhận được từ getTimeZoneOffset() trong ví dụ cần giờ địa phương và chỉ giữ nó dưới dạng siêu dữ liệu được sử dụng để gỡ lỗi. Một lần nữa, một bài viết có cùng độ dài với bài báo này có thể chỉ viết về điều này. Nếu bạn đang lưu trữ múi giờ dưới dạng cài đặt người dùng, thì các phương thức ngày UTC trong JavaScript sẽ đủ và có thể tránh hoàn toàn new Date()

Trừng phạt Jajodia

Cảm ơn đã chỉ ra điều đó. tôi đã sửa nó. . )

Trừng phạt Jajodia

Cảm ơn đã chỉ ra điều đó. tôi đã sửa nó. . )

Trừng phạt Jajodia

Tôi rất vui vì bài viết hữu ích. Đừng quên sử dụng nó như một nội dung giáo dục và sử dụng thư viện như khoảnh khắc. js bất cứ khi nào có thể

Trừng phạt Jajodia

Tôi rất vui vì bài viết hữu ích. Đừng quên sử dụng nó như một nội dung giáo dục và sử dụng thư viện như khoảnh khắc. js bất cứ khi nào có thể

tapfumamanhanga

Bài viết hay thật. Tôi gặp phải rất nhiều thách thức khi cố gắng xử lý ngày tháng trong một dự án điểm bán hàng trực tuyến. Nó liên quan đến rất nhiều hàm ngày tháng và số học ngày tháng mà bằng cách nào đó tôi đã vượt qua được một cách thần kỳ. Sau khi đọc bài viết này, có một số khái niệm cơ bản tôi đã chọn sẽ giúp tôi trong các dự án trong tương lai

tapfumamanhanga

Bài viết hay thật. Tôi gặp phải rất nhiều thách thức khi cố gắng xử lý ngày tháng trong một dự án điểm bán hàng trực tuyến. Nó liên quan đến rất nhiều hàm ngày tháng và số học ngày tháng mà bằng cách nào đó tôi đã vượt qua được một cách thần kỳ. Sau khi đọc bài viết này, có một số khái niệm cơ bản tôi đã chọn sẽ giúp tôi trong các dự án trong tương lai

Michael Haephrati

Tôi đã viết một bài báo về http đó. //www. dự án mật mã. com/Articles/792931/Date-time-batch-changer-for-photos-and-other-files

Michael Haephrati

Tôi đã viết một bài báo về http đó. //www. dự án mật mã. com/Articles/792931/Date-time-batch-changer-for-photos-and-other-files

David Bruchmann

Có nhiều hạn chế về ngày liên quan đến các công cụ và định dạng bạn đang sử dụng. Hạn chế nổi tiếng nhất là dấu thời gian, bắt đầu từ 1. 1. 1970. Trong nhiều ứng dụng, bản ghi có ngày này nếu người dùng không bao giờ nhập ngày. Thời gian càng trôi qua, tình huống càng trở nên không rõ ràng và càng có nhiều khả năng giá trị bằng 0 dẫn đến nhầm lẫn và bị hiểu sai. Nếu ai đó được sinh ra vào ngày đó lúc 0. 00 thì có thể ngày-giờ-sinh của anh ấy sẽ được hiểu là trống/không được nhập. Vẫn còn nhiều hạn chế, tùy theo năm tháng. 1900, 1000, 0, v.v. Nếu bạn phải xử lý các ngày lịch sử thì đây là một vấn đề lớn, vì bạn phải lập trình ngay cả Đối tượng ngày tháng mới cho một số ngôn ngữ lập trình và cơ sở dữ liệu. Vì vậy, nếu bạn sử dụng các thư viện cho những vấn đề đó, hãy xem liệu các đối tượng ngày tháng đã sử dụng có hỗ trợ dateTimes đã sử dụng hay không, nếu không, bạn có thể trực tiếp tìm kiếm một thư viện khác. Liên quan đến những hạn chế, toàn bộ vấn đề về ngày giờ là lỗi lớn nhất trong toàn bộ bối cảnh CNTT, bất kể ngôn ngữ lập trình hay loại cơ sở dữ liệu

David Bruchmann

Có nhiều hạn chế về ngày liên quan đến các công cụ và định dạng bạn đang sử dụng. Hạn chế nổi tiếng nhất là dấu thời gian, bắt đầu từ 1. 1. 1970. Trong nhiều ứng dụng, bản ghi có ngày này nếu người dùng không bao giờ nhập ngày. Thời gian càng trôi qua, tình huống càng trở nên không rõ ràng và càng có nhiều khả năng giá trị bằng 0 dẫn đến nhầm lẫn và bị hiểu sai. Nếu ai đó được sinh ra vào ngày đó lúc 0. 00 thì có thể ngày-giờ-sinh của anh ấy sẽ được hiểu là trống/không được nhập. Vẫn còn nhiều hạn chế, tùy theo năm tháng. 1900, 1000, 0, v.v. Nếu bạn phải xử lý các ngày lịch sử thì đây là một vấn đề lớn, vì bạn phải lập trình ngay cả Đối tượng ngày tháng mới cho một số ngôn ngữ lập trình và cơ sở dữ liệu. Vì vậy, nếu bạn sử dụng các thư viện cho những vấn đề đó, hãy xem liệu các đối tượng ngày tháng đã sử dụng có hỗ trợ dateTimes đã sử dụng hay không, nếu không, bạn có thể trực tiếp tìm kiếm một thư viện khác. Liên quan đến những hạn chế, toàn bộ vấn đề về ngày giờ là lỗi lớn nhất trong toàn bộ bối cảnh CNTT, bất kể ngôn ngữ lập trình hay loại cơ sở dữ liệu

Frédéric Camblor

bài viết hay. Có (ít nhất) một trường hợp sử dụng quan trọng mà bạn chưa đề cập trong bài viết này. khi bạn phải đối phó với "chỉ thời gian" (chứ không phải thời gian gắn liền với một ngày). Trường hợp sử dụng điển hình. giả sử bạn muốn thực hiện một chương trình làm việc và muốn mô hình hóa câu "Tôi có một cuộc họp vào thứ Hai hàng tuần lúc 10. 00 giờ sáng". Bạn sẽ lưu trữ cái này trong DB như thế nào? . 00 AM", có nghĩa là "lúc 10. 00 AM múi giờ của tôi tính đến hôm nay". Một câu hỏi quan trọng để xem xét sẽ là. "nếu chênh lệch múi giờ thay đổi trong năm, tôi có nên giữ nguyên 10. 00 giờ sáng cho dù múi giờ của tôi có chênh lệch múi giờ hay không, hoặc nó có nên được thay đổi cùng với thay đổi chênh lệch múi giờ của tôi không. " Một ví dụ có thể rõ ràng hơn. tôi sống ở Pháp. Chênh lệch múi giờ hiện tại của chúng tôi kể từ hôm nay (ngày 30 tháng 1 năm 2017) it +01. 00 kể từ khi chúng ta vào mùa đông. Thay đổi giờ mùa hè được lên kế hoạch kích hoạt vào ngày 26 tháng 3 năm 2017 lúc 01. 00 UTC, nghĩa là lúc đó chúng ta sẽ chuyển từ 02. 00+01. 00 đến 03. 00+02. 00. Khi nào tôi sẽ tạo mục chương trình nghị sự của mình "lúc 10. 00 AM", nó sẽ tạo một cuộc họp lúc 10. 00+01. 00 cho mỗi tuần sắp tới. Tuy nhiên, một khi tôi chuyển sang thời gian mùa hè, điều gì sẽ xảy ra? . - Đặt một mục chương trình nghị sự ở 10. 00+02. 00. ở đó, các đồng đội của tôi ở Pháp sẽ tiếp tục tham dự cuộc họp vào cùng một giờ trong ngày, bất kể chúng tôi đang ở mùa hè hay mùa đông. Tuy nhiên, nếu tôi làm việc với các đồng đội ở các quốc gia khác ngoài Pháp, với thời gian chuyển đổi mùa đông/hè khác (hoặc đơn giản là không), thì giờ trong ngày của họ sẽ bị thay đổi. - Đặt một mục chương trình nghị sự ở 11. 00+02. 00 (=giữ nguyên 09 ban đầu. 00Z bù múi giờ). Ở đây, các đồng đội của tôi ở Pháp sẽ ngạc nhiên vào ngày 27 tháng 3 vì nó sẽ phá vỡ thói quen của họ. Tuy nhiên, đồng đội của tôi ở Mỹ sẽ không bị ảnh hưởng bởi sự thay đổi này vào ngày 27 tháng 3. Đối với trường hợp sử dụng điển hình này, nơi chúng tôi chỉ làm việc với thời gian (và ngày xảy ra cùng với thứ nguyên thời gian), tôi sẽ cung cấp cách triển khai lưu trữ khác nhau tùy thuộc vào 2 tùy chọn ở trên. - Đối với tùy chọn đầu tiên, nơi chúng tôi đang làm việc với "thời gian được đặt múi giờ", tôi sẽ lưu trữ thời gian ("10. 00. 00") không đính kèm phần bù múi giờ + Múi giờ ("Châu Âu/Paris"). theo cách đó, được cung cấp một ngày (giả sử là 27-03-2017) tôi sẽ có thể tính toán ngày đó cho múi giờ "Châu Âu/Paris", "10. 00" sẽ là "10. 00+02. 00" vào ngày 27-03-2017. - Đối với tùy chọn thứ hai, tôi sẽ xem xét lưu trữ thời gian dưới dạng "Giờ UTC", ví dụ: lưu trữ "09. 00Z" (đặt múi giờ UTC cùng với thời gian, để ghi nhớ rằng tôi đang làm việc theo giờ UTC). Bằng cách đó, vào ngày 27-03-2017, tôi sẽ thêm thời gian UTC này vào ngày, sau đó chuyển đổi nó thành múi giờ mục tiêu (trong trường hợp của tôi, tôi sẽ kết thúc bằng "11. 00+02. 00") Trân trọng,

Frédéric Camblor

bài viết hay. Có (ít nhất) một trường hợp sử dụng quan trọng mà bạn chưa đề cập trong bài viết này. khi bạn phải đối phó với "chỉ thời gian" (chứ không phải thời gian gắn liền với một ngày). Trường hợp sử dụng điển hình. giả sử bạn muốn thực hiện một chương trình làm việc và muốn mô hình hóa câu "Tôi có một cuộc họp vào thứ Hai hàng tuần lúc 10. 00 giờ sáng". Bạn sẽ lưu trữ cái này trong DB như thế nào? . 00 AM", có nghĩa là "lúc 10. 00 AM múi giờ của tôi tính đến hôm nay". Một câu hỏi quan trọng để xem xét sẽ là. "nếu chênh lệch múi giờ thay đổi trong năm, tôi có nên giữ nguyên 10. 00 giờ sáng cho dù múi giờ của tôi có chênh lệch múi giờ hay không, hoặc nó có nên được thay đổi cùng với thay đổi chênh lệch múi giờ của tôi không. " Một ví dụ có thể rõ ràng hơn. tôi sống ở Pháp. Chênh lệch múi giờ hiện tại của chúng tôi kể từ hôm nay (ngày 30 tháng 1 năm 2017) it +01. 00 kể từ khi chúng ta vào mùa đông. Thay đổi giờ mùa hè được lên kế hoạch kích hoạt vào ngày 26 tháng 3 năm 2017 lúc 01. 00 UTC, nghĩa là lúc đó chúng ta sẽ chuyển từ 02. 00+01. 00 đến 03. 00+02. 00. Khi nào tôi sẽ tạo mục chương trình nghị sự của mình "lúc 10. 00 AM", nó sẽ tạo một cuộc họp lúc 10. 00+01. 00 cho mỗi tuần sắp tới. Tuy nhiên, một khi tôi chuyển sang thời gian mùa hè, điều gì sẽ xảy ra? . - Đặt một mục chương trình nghị sự ở 10. 00+02. 00. ở đó, các đồng đội của tôi ở Pháp sẽ tiếp tục tham dự cuộc họp vào cùng một giờ trong ngày, bất kể chúng tôi đang ở mùa hè hay mùa đông. Tuy nhiên, nếu tôi làm việc với các đồng đội ở các quốc gia khác ngoài Pháp, với thời gian chuyển đổi mùa đông/hè khác (hoặc đơn giản là không), thì giờ trong ngày của họ sẽ bị thay đổi. - Đặt một mục chương trình nghị sự ở 11. 00+02. 00 (=giữ nguyên 09 ban đầu. 00Z bù múi giờ). Ở đây, các đồng đội của tôi ở Pháp sẽ ngạc nhiên vào ngày 27 tháng 3 vì nó sẽ phá vỡ thói quen của họ. Tuy nhiên, đồng đội của tôi ở Mỹ sẽ không bị ảnh hưởng bởi sự thay đổi này vào ngày 27 tháng 3. Đối với trường hợp sử dụng điển hình này, nơi chúng tôi chỉ làm việc với thời gian (và ngày xảy ra cùng với thứ nguyên thời gian), tôi sẽ cung cấp cách triển khai lưu trữ khác nhau tùy thuộc vào 2 tùy chọn ở trên. - Đối với tùy chọn đầu tiên, nơi chúng tôi đang làm việc với "thời gian được đặt múi giờ", tôi sẽ lưu trữ thời gian ("10. 00. 00") không đính kèm phần bù múi giờ + Múi giờ ("Châu Âu/Paris"). theo cách đó, được cung cấp một ngày (giả sử là 27-03-2017) tôi sẽ có thể tính toán ngày đó cho múi giờ "Châu Âu/Paris", "10. 00" sẽ là "10. 00+02. 00" vào ngày 27-03-2017. - Đối với tùy chọn thứ hai, tôi sẽ xem xét lưu trữ thời gian dưới dạng "Giờ UTC", ví dụ: lưu trữ "09. 00Z" (đặt múi giờ UTC cùng với thời gian, để ghi nhớ rằng tôi đang làm việc theo giờ UTC). Bằng cách đó, vào ngày 27-03-2017, tôi sẽ thêm thời gian UTC này vào ngày, sau đó chuyển đổi nó thành múi giờ mục tiêu (trong trường hợp của tôi, tôi sẽ kết thúc bằng "11. 00+02. 00") Trân trọng,

Mohd Akram

Đây là một bài viết rất nhiều thông tin. Tôi cũng đồng ý với tiêu đề bài đăng của bạn và bạn giải thích rất rõ quan điểm của mình. Tôi rất vui khi thấy bài viết này. cảm ơn đã chia sẻ với chúng tôi. Giữ nó lên và chia sẻ bài viết liên quan nhất. www. từ mã. com

Mohd Akram

Đây là một bài viết rất nhiều thông tin. Tôi cũng đồng ý với tiêu đề bài đăng của bạn và bạn giải thích rất rõ quan điểm của mình. Tôi rất vui khi thấy bài viết này. cảm ơn đã chia sẻ với chúng tôi. Giữ nó lên và chia sẻ bài viết liên quan nhất. www. từ mã. com

Nicola

https. //www. đỉnh cao. com/software/definitive-guide-to-datetime-manipulation#storing-the-date var timeParts = timefromUI. tách ra(". "); phải là var timeParts = timeFromUI. tách ra(". "); Bài báo tuyệt vời. Nó thuyết phục tôi không sử dụng trực tiếp Ngày JS và thay vào đó sử dụng thời điểm

Nicola

https. //www. đỉnh cao. com/software/definitive-guide-to-datetime-manipulation#storing-the-date var timeParts = timefromUI. tách ra(". "); phải là var timeParts = timeFromUI. tách ra(". "); Bài báo tuyệt vời. Nó thuyết phục tôi không sử dụng trực tiếp Ngày JS và thay vào đó sử dụng thời điểm

urvashi majithia

Xin chào, Có thể lấy cùng một ngày từ một trường ngày khác, giống như kế thừa cùng một ngày không?

urvashi majithia

Xin chào, Có thể lấy cùng một ngày từ một trường ngày khác, giống như kế thừa cùng một ngày không?

Pawan sâu

Xin chào Punit, Điều đó có thể không, tôi có một ngày như ngày mới ('19 tháng 8 năm 1975 23. 15. 30 GMT+07. 00') và tôi muốn lấy tên khu vực có tên quốc gia như "America/New_York"?

Pawan sâu

Xin chào Punit, Điều đó có thể không, tôi có một ngày như ngày mới ('19 tháng 8 năm 1975 23. 15. 30 GMT+07. 00') và tôi muốn lấy tên khu vực có tên quốc gia như "America/New_York"?

Công chúa

Xin chào, bạn có thể giúp tôi với logic. Tôi muốn tạo đồng hồ Kỹ thuật số tùy chỉnh có 32 giờ thay vì 24 và mỗi giờ = 45 phút thay vì 60 phút

Công chúa

Xin chào, bạn có thể giúp tôi với logic. Tôi muốn tạo đồng hồ Kỹ thuật số tùy chỉnh có 32 giờ thay vì 24 và mỗi giờ = 45 phút thay vì 60 phút

zumizo

Bài báo tuyệt vời

Sergio Aguiar

Xin chào ngài. Tôi thực sự đánh giá cao bài viết đó là rất tốt và nhiều thông tin. Tuy nhiên, tôi có một câu hỏi về cách tính ngày giờ. Tôi có một bảng dữ liệu, trong đó có ngày giờ bắt đầu và ngày giờ kết thúc và tôi cần so sánh chúng để xem liệu thời gian hiện tại có nằm giữa hai thời điểm trên không (nếu thời gian hiện tại nhỏ hơn thời gian kết thúc và lớn hơn thời gian bắt đầu . Các mục dữ liệu có định dạng. 2020-03-12 12. 28. 54 Bạn có thể giúp tôi tìm cách làm cái này không?

Kashif Jaffri

Viết đẹp và rõ ràng. Rất hữu ích, cảm ơn đã chia sẻ

Kevin Bloch

I would think you could take the current time of day, calculate how many minutes have passed since midnight (minutes + hours*60), then divide by 45 for your new "hours" and use the remainder for the current minutes. The seconds (and anything smaller) would stay the same as on the normal clock.

Jon Seidel

Tôi thắc mắc về ví dụ chuyển đổi UTC mà bạn đã đưa ra ở đầu bài viết. "Tôi sống ở UTC+5. 45. Điều này có nghĩa là khi ở nơi tôi sống là 5 giờ chiều thì đó là 11. 15 giờ UTC. ". Theo tính toán của tôi, 5. 00 + 5. 45 sinh 10. 45UTC, vậy làm thế nào để bạn đến 11. 15 UTC?

Kevin Bloch

Good question. The article will be updated to make this a bit more explicit, but the math was, in fact, correct. When it's 5 PM where the author lives, since his timezone is UTC+05:45, that means to get back to UTC, we need to subtract 5:45, not add it. The result is 11:15 (AM) UTC. After that, when we go from UTC to Uppsala's UTC+01:00 timezone, then we're adding, so the final result is 12:15 PM Uppsala time. I hope that helps. :)

nhân đôi

Tôi phải hoàn toàn không đồng ý với bạn khi thực hiện các thao tác ngày tháng trong JavaScript. Nó chỉ có quá nhiều hạn chế. Thành thật mà nói, làm bất cứ điều gì với ngày tháng trong JavaScript thực sự tệ. Nó cũng có thể dẫn đến sự không nhất quán khi bạn phải thực hiện thao tác ngày tháng hoặc tra cứu ở mặt sau do một bộ quy tắc khác đang được tuân theo. Tôi sẽ lấy trang web của riêng tôi làm ví dụ. Đó là một trang web giúp lập kế hoạch và lên lịch các sự kiện. Thường thì những sự kiện này diễn ra ở múi giờ khác với vị trí hiện tại của người dùng. Vì vậy, ai đó có thể đăng nhập từ múi giờ miền Trung, nhưng đang lên kế hoạch cho một sự kiện ở múi giờ miền Đông. Điều này gần như không thể xử lý bằng JavaScript, vì không có cách nào để chuyển đổi thời gian từ vùng này sang vùng khác. Vì vậy, trang web của tôi có một cách tiếp cận khác. tất cả thời gian được liệt kê luôn theo múi giờ địa phương nơi sự kiện đang diễn ra. Nó cũng có ý nghĩa hơn, như mọi người nghĩ theo giờ địa phương, không phải theo giờ UTC, vậy tại sao lại thực hiện các chuyển đổi không cần thiết? . Nếu các chuyển đổi được thực hiện trong trình duyệt, số sẽ hiển thị là 8. 00 AM trong khi ở một múi giờ có thể hiển thị là 9. 00 giờ sáng khi ở múi giờ khác. Làm thế nào để người dùng biết giá trị nào là đúng? . Cũng có nhiều lúc giờ địa phương là thời điểm thích hợp để lưu trữ trong cơ sở dữ liệu. Trong trường hợp của tôi, tôi lưu trữ thời gian diễn ra sự kiện theo múi giờ địa phương. Nhưng mọi thứ khác (nhật ký hoạt động, v.v. ) là tất cả trong UTC. Điều này đặc biệt hữu ích khi tôi cần gửi email nhắc nhở -- chúng sẽ gửi đi dựa trên giờ địa phương của sự kiện. Nếu tôi phải chuyển đổi UTC trong cơ sở dữ liệu thành cục bộ mỗi khi tôi chạy truy vấn cơ sở dữ liệu, những truy vấn đó sẽ mất mãi mãi vì việc chuyển đổi phải được thực hiện cho mỗi hàng. Rất tốn thời gian. Vì vậy, tôi lưu trữ thời gian liên quan đến sự kiện theo giờ địa phương, thực hiện chuyển đổi múi giờ UTC sang múi giờ địa phương trước khi chạy truy vấn để xem cảnh báo nào có liên quan vào thời điểm đó. Điều này cho phép tôi tối ưu hóa hiệu suất với các chỉ mục trên các cột đó. Chắc chắn có nhiều lúc UTC có ý nghĩa, nhưng khi hiển thị thời gian cho người dùng trang web, giờ địa phương là cách tốt nhất. Chuyển đổi sang UTC khi cần thiết, nhưng phần lớn thời gian giờ địa phương có ý nghĩa hơn nhiều vì đó là những gì mọi người giải quyết trong thế giới thực

Volker Kleinschmidt

Không có vấn đề gì khi có các múi giờ không phải UTC trên máy chủ của bạn, miễn là mọi thứ nhất quán giữa múi giờ của hệ điều hành và múi giờ của cơ sở dữ liệu. Thực sự tốt hơn nhiều nếu máy chủ được định cấu hình theo múi giờ địa phương thích hợp cho máy khách có ứng dụng mà nó lưu trữ. Dẫn đến ít nhầm lẫn hơn khi quản trị viên hệ thống và người dùng cuối nói về các ngày trong cùng một múi giờ

Kevin Bloch

Đôi khi, có lẽ. Ngay cả ở đó cũng có khả năng xảy ra lỗi (như bạn đã đề cập, miễn là mọi thứ nhất quán—cuối cùng, điều đó phụ thuộc vào người đang quản lý các yếu tố đó và khả năng chúng bị quản lý sai, được quản lý khác bởi người mới, v.v. ) và tiền đề về một khách hàng thuộc một múi giờ duy nhất cũng không được đưa ra trong lực lượng lao động phân tán ngày nay, ngay cả đối với các khách hàng nhỏ hơn. Do đó chữ "U" trong UTC. ;) (Một điều khác cần xem xét là, nếu một ngày nào đó tình hình thay đổi, thì cũng sẽ có một số chi phí để chuyển mọi thứ sang UTC. Nhưng tôi thừa nhận, đây có thể là tối ưu hóa sớm trong một số trường hợp. )

Sai Swaroop Bedamatta

Xin chào, cảm ơn vì blog. Tôi có một truy vấn, tôi muốn hiển thị ngày và ngày tùy chỉnh như mỗi tuần thứ hai+ngày, thứ tư+ngày, thứ sáu+ngày. Làm thế nào tôi có thể làm điều đó?

inviscidpixels

Mr Punit Tôi chỉ muốn nói rằng đây là một bài viết hướng dẫn và được viết rất hay về những gì thường có thể là một cơn ác mộng, phân tích cú pháp và hình thành thời gian trên web. Không chỉ vậy, nó còn toàn diện đến mức nó cung cấp một nền tảng vững chắc cho nhà phát triển mới hoặc thậm chí là một người có kinh nghiệm cần tìm hiểu về chủ đề này. Thanks. Hy vọng nỗ lực của bạn đang diễn ra tốt đẹp

JavaScript lấy ngày từ đâu?

Ngày và giờ được chia nhỏ và in theo cách mà con người chúng ta có thể hiểu được. Tuy nhiên, JavaScript hiểu ngày dựa trên dấu thời gian bắt nguồn từ thời gian Unix , là giá trị bao gồm số mili giây đã trôi qua kể từ nửa đêm ngày .

Date() lấy thời gian từ đâu?

nguyên mẫu. getTime() Phương thức getTime() trả về số mili giây kể từ kỷ nguyên , được định nghĩa là nửa đêm vào đầu ngày 1 tháng 1 năm 1970, .

Đối tượng ngày được tạo trong JavaScript như thế nào?

Đối tượng Date được tạo bằng từ khóa new, i. e. Ngày mới(). Đối tượng Date có thể được sử dụng ngày và giờ với độ chính xác đến mili giây trong vòng 100 triệu ngày trước hoặc sau ngày 1/1/1970. .
Ngày mới(). .
Ngày mới (mili giây). .
Ngày mới (chuỗi dữ liệu). .
ngày mới (năm, tháng, ngày, giờ, phút, giây, mili giây)

Làm cách nào để có được ngày đã chọn trong JavaScript?

Thuộc tính giá trị ngày nhập .
Đặt ngày cho trường ngày. getElementById("myDate"). giá trị = "2014-02-09";
Lấy ngày của một trường ngày. var x = tài liệu. getElementById("myDate"). giá trị;
Một ví dụ cho thấy sự khác biệt giữa thuộc tính defaultValue và value. getElementById("myDate");