Định dạng thời gian JavaScript

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

ĐĂNG LẠI

ĐĂNG LẠI

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 tình trạng khó hiểu về 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 phép biế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, đâ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. When it doesn’t, what happens when the rules your database engine uses don’t match those of your front or back end?

This problem of managing two different versions of the time, relative to the user and relative to a universally accepted standard, is difficult, even more so in the world of programming where precision is key and even one second can make a huge difference. The first step towards solving these issues is to store DateTime in UTC

Standardizing the Format

Standardizing the time is wonderful because I only need to store the UTC time and as long as I know the time zone of the user, I can always convert to their time. Conversely, if I know a user’s local time and know their time zone, I can convert that to UTC

But dates and times can be specified in many different formats. For the date, you could write “Jul 30th” or “30 July” or “7/30” [or 30/7, depending on where you live]. For the time, you could write “9. 30 PM” or “2130”

Scientists all over the world came together to tackle this problem and decided on a format to describe time that programmers really like because it’s short and precise. We like to call it “ISO date format,” which is a simplified version of the ISO-8601 extended format and it looks like this

For 00. 00 or UTC, we use “Z” instead, which means Zulu time, another name for UTC

Date Manipulation and Arithmetic in JavaScript

Before we start with best practices, we will learn about date manipulation using JavaScript to get a grasp of the syntax and general concepts. Although we use JavaScript, you can adapt this information to your favorite programming language easily

We will use date arithmetic to solve common date-related problems that most developers come across

My goal is to make you comfortable creating a date object from a string and extracting components out of one. This is something that a date library can help you with, but it’s always better to understand how it is done behind the scenes

Once we’ve gotten our hands dirty with date/time, it is then easier to think about the problems we face, extract the best practices, and move ahead. If you want to skip to the best practices, feel free to do so, but I would highly recommend you to at least skim through the date-arithmetic section below

The JavaScript Date Object

Programming languages contain useful constructs to make our lives easier. The JavaScript

const date = new Date[2016, 6, 27, 13, 30, 0];
9 object is one such thing. It offers convenient methods to get the current date and time, store a date in a variable, perform date arithmetic, and format the date based on the user’s locale

Due to differences between browser implementations and incorrect handling of Daylight Savings Time [DST], depending on the Date object for mission-critical applications is not recommended and you should probably be using a DateTime library like Luxon, date-fns, or dayjs. [Whatever you use, avoid the once-popular Moment. js—often simply called

const date = new Date["2016-07-27T07:45:00Z"];
0, as it appears in code—since it’s now deprecated. ]

But for educational purposes, we will use the methods that the Date[] object provides to learn how JavaScript handles DateTime

Getting Current Date

const currentDate = new Date[];

If you don’t pass anything to the Date constructor, the date object returned contains the current date and time

You can then format it to extract only the date part as follows

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ú. The “January is 0” pitfall is common but not universal. It’s worth double-checking the documentation of any language [or configuration format. e. g. , cron is notably 1-based] before you start using it

Getting the Current Time Stamp

If you instead want to get the current time stamp, you can create a new Date object and use the getTime[] method

const currentDate = new Date[];
const timestamp = currentDate.getTime[];

In JavaScript, a time stamp is the number of milliseconds that have passed since January 1, 1970

If you don’t intend to support

Chủ Đề