Lập trình PHP và chuyện ngày 01 tháng 01 năm 1970

Submitted by superthin on 24/03/2019 - 09:08:12
Kỷ nguyên Unix

Vừa rồi Thin có viết một ứng dụng web nhỏ để phục vụ cho công việc văn phòng của mình. Thực sự mà nói, việc ngồi viết code cũng có lúc thú vị, nhưng lắm lúc cũng gây bực mình. Lý do của việc này có nhiều, nhưng chủ yếu là ngồi viết mã một mình với tiếng quạt trần kêu cót két trên đầu, không điên cũng lạ.

Thế chuyện đó liên quan thế quái nào đến ngày 01/01/1970 vậy Thin? Chẳng liên quan gì ráo trọi. Thế nhưng dây cà ra dây muống là chuyện rất thường ở đời.

Từ việc máy tính sử dụng ngày tháng thường theo định dạng 1970-01-01 (yyyy-mm-dd), còn người dân ở các nước sử dụng định dạng khác. Ví dụ như Mỹ thì mm-dd-yyyy, còn Việt Nam thì dd-mm-yyyy. Như vậy, trong quá trình lập trình, việc tính toán, chuyển đổi ngày tháng, xuất định dạng... là việc không thể không "đụng tay tới". Tuy thế, lập trình viên PHP đa số tự học, trình độ, cấp bậc khác nhau rất nhiều, một số người lại chẳng có hiểu biết gì về lịch pháp, lịch sử máy tính, không có kiến thức về kiến trúc máy tính, các ngôn ngữ lập trình cổ xưa,... nên khi xử lý ngày tháng đã không cẩn trọng (hoặc không ý thức được sự nghiêm trọng) dẫn đến tình trạng mà bạn thấy ngày 01/01/1970 xuất hiện nhan nhản ở các trang web mà chả hiểu ra làm sao. Nói chung, trang web đó được một người/ nhóm người lập trình dở tệ làm ra hoặc họ xào nấu mã nguồn lung tung.

Để giải thích tường tận sẽ mất rất nhiều thời gian, hao tốn nhiều cà phê nên Thin chỉ giới thiệu đến các bạn các khái niệm cần tra cứu Unix epoch, POSIX, timestamp, 32-bit.

Nếu bạn quá lười, chỉ cần bạn biết rằng ngày 01/01/1970 được đánh số từ số không (0 hoặc zero), và cứ mỗi giây trôi qua sẽ được cộng thêm 1. Cho đến lúc này (tức lúc 9:42 phút ngày 24/03/2019) là 1553420535.

Hẳn một vài lần trong đời bạn đi dạo trên các website, bạn cực kỳ điên tiết khi tại sao chỗ ngày tháng năm (thường là sinh nhật hoặc ngày đăng ký, ngày tạo tài khoản, blah blah) cứ hay đụng độ một cô nàng/ anh chàng có sinh nhật 01/01/1970. Giờ bạn đã hiểu nguyên do rồi chứ?

Câu hỏi đặt ra sẽ là vào năm 2038 thì có một sự cố nào tương tự kiểu sự cố Y2K xảy ra một lần nữa hay không? Câu trả lời có lẽ là không, bởi vì hiện nay các máy tính, và cả phần mềm hầu như đã chuyển sang sử dụng 64-bit cả rồi. Cho nên, nếu có xảy ra cũng chỉ ở quy mô nhỏ lẻ, ở những phần mềm được viết kém, lỗi thời không còn mấy ai sử dụng./.