Nếu bạn giống tôi, có lẽ bạn đã tự hỏi liệu có cách nào để chuyển đổi Dấu thời gian Epoch mà không cần phải vò đầu bứt tóc hay không. Trong bài viết này, chúng ta sẽ xem xét việc chuyển đổi dấu thời gian Epoch mà không gây đau đầu cho các nhà phát triển của bạn
Gần đây tôi đang gỡ lỗi một công việc định kỳ trên trang web Drupal mà Envano duy trì. Vì các công việc định kỳ chạy trong nền vào những thời điểm nhất định trong ngày, nên rất khó để biết vấn đề gì đã khiến nó bị hỏng. May mắn thay, Drupal cung cấp hệ thống ghi nhật ký nội bộ của riêng mình, lưu trữ nhật ký trong bảng cơ sở dữ liệu có tên là 'cơ quan giám sát'
Dưới đây là một ví dụ về cách ghi thông tin vào bảng giám sát của Drupal
\Drupal::logger['product_import']->notice["Product Import Ran"];
Điều này rất hữu ích, nhưng có một vấn đề là khi chạy các truy vấn MySQL trên bảng này, ngày và giờ được trả về dưới dạng dấu thời gian kỷ nguyên UNIX, tôi. e. 1639087126.
Đối với nền tảng, “[Kỷ nguyên UNIX] là một hệ thống để mô tả một thời điểm. Đó là số giây đã trôi qua kể từ kỷ nguyên Unix, không bao gồm giây nhuận. Kỷ nguyên Unix là 00. 00. 00 UTC ngày 1 tháng 1 năm 1970 [một ngày tùy ý]. ” [Wikipedia]
Ví dụ của tôi ở trên về 1639087126 là ngày và giờ tính bằng giây kể từ ngày 1 tháng 1 năm 1970, tức là ngày 9 tháng 12 năm 2021 lúc 9 giờ. 58. 46 CH. Có những trang web như epochconverter. com nơi có thể nhập thời gian kỷ nguyên và nó sẽ trả về ngày được định dạng theo cách con người có thể đọc được. Tuy nhiên, quá trình này rất tẻ nhạt, đặc biệt nếu có một số lượng lớn ngày cần chuyển đổi
Hàm FROM_UNIXTIME[] của MySQL
Sau khi thực hiện một số nghiên cứu, tôi thấy rằng MySQL có một chức năng có thể được thêm vào truy vấn SQL để tự động chuyển đổi dấu thời gian kỷ nguyên UNIX một cách nhanh chóng khi chạy truy vấn. Hàm này có thể được sử dụng bằng cách chuyển vào tên cột được lưu dưới dạng dấu thời gian và định dạng ngày như bên dưới
SELECT *, FROM_UNIXTIME[timestamp, '%h:%i:%s - %m/%d/%y'] as nice_date FROM watchdog order by timestamp desc;
Các định dạng ngày khác có thể được tìm thấy trong
Đặt múi giờ của một ngày trong MySQL
Một vấn đề khác mà tôi gặp phải là ngày trả về không sử dụng múi giờ ưa thích của tôi. May mắn thay, MySQL cung cấp một cách để tạm thời đặt múi giờ khi chạy truy vấn bằng cách sử dụng như sau
Ngày và giờ có thể được lưu trữ dưới dạng giá trị số nguyên dưới dạng dấu thời gian UNIX. Đây không phải là định dạng đặc biệt mà con người có thể đọc được nhưng có thể được chuyển đổi trong MySQL thành giá trị ngày giờ bằng cách sử dụng hàm FROM_UNIXTIME
Ngày và giờ dưới dạng dấu thời gian
Quay lại lần đầu tiên khi tôi bắt đầu sử dụng MySQL và PHP và tạo một hệ thống thương mại điện tử được sử dụng trên một số trang web, tôi đã quyết định lưu trữ thời gian biểu dưới dạng dấu thời gian UNIX vì bất kỳ lý do gì. Điều này giúp dễ dàng sử dụng hàm ngày PHP để định dạng ngày nhưng không hữu ích khi duyệt dữ liệu trong cơ sở dữ liệu hoặc chọn phạm vi ngày trong truy vấn. Tôi không còn làm điều này nữa và luôn lưu trữ ngày giờ dưới dạng loại trường ngày giờ
Chuyển đổi dấu thời gian số nguyên thành ngày giờ
Trong hệ thống thương mại điện tử cũ của tôi, có một bảng gọi là "đơn đặt hàng" với một cột có tên "date_ordered" là dấu thời gian UNIX được lưu dưới dạng số nguyên. Để chuyển đổi điều này thành một ngày giờ như một phần của truy vấn CHỌN, điều này cần được thực hiện
SELECT other fields here, FROM_UNIXTIME[date_ordered]
FROM orders
WHERE ...
Trường số nguyên bây giờ sẽ được biểu thị trong tập kết quả dưới dạng chuỗi ngày giờ ở định dạng YYYY-MM-DD HH. MM. SS
Hàm UNIX_TIMESTAMP[] trong MySQL
Cải thiện bài viết
Lưu bài viết
Thích bài viết
- Cập nhật lần cuối. 22 tháng 12 năm 2020
Cải thiện bài viết
Lưu bài viết
UNIX_TIMESTAMP[]
Chức năng này trong MySQL giúp trả về dấu thời gian Unix. Chúng ta có thể định nghĩa dấu thời gian Unix là số giây đã trôi qua kể từ '1970-01-01 00. 00. 00'UTC. Ngay cả khi bạn vượt qua ngày/giờ hiện tại hoặc một ngày/giờ được chỉ định khác, hàm sẽ trả về dấu thời gian Unix dựa trên đó
cú pháp
UNIX_TIMESTAMP[] UNIX_TIMESTAMP[date]
Thông số
Nó sẽ chỉ chấp nhận một đối số
- ngày -
Giá trị ngày có thể là NGÀY, DATETIME, DẤU THỜI GIAN hoặc một số ở định dạng 'YYYYMMDD' hoặc 'YYMMDD'
Trở lại
- Nếu không có tham số nào được truyền, hàm sẽ trả về dấu thời gian Unix sau vài giây kể từ '1970-01-01 00. 00. 00’ UTC ở dạng số nguyên không dấu
- Nhưng nếu tham số ngày được truyền vào, hàm sẽ trả về giá trị của tham số ở dạng số nguyên không dấu tính bằng giây kể từ '1970-01-01 00. 00. 00’ UTC
Ví dụ 1
Hoạt động của UNIX_TIMESTAMP[] sử dụng Ngày/giờ hiện tại
SELECT UNIX_TIMESTAMP[] As TimeStamp;
đầu ra
Dấu thời gian1606925233Ví dụ-2
Hoạt động của UNIX_TIMESTAMP[] sử dụng giá trị ngày '1999-01-22'
SELECT UNIX_TIMESTAMP['1999-01-22'] As TimeStamp;
đầu ra
Dấu thời gian916988400Ví dụ-3
Hoạt động của UNIX_TIMESTAMP[] sử dụng giá trị DateTime ‘2020-10-17 02. 35. 43’
SELECT UNIX_TIMESTAMP['2020-10-17 02:35:43'] As TimeStamp;
đầu ra
Dấu thời gian1602923743Ví dụ-4
Hoạt động của UNIX_TIMESTAMP[] sử dụng giá trị DateTime cùng với giây phân số ‘2020-10-17 02. 35. 43. 12345’
SELECT UNIX_TIMESTAMP['2020-10-17 02:35:43.12345'] As TimeStamp;
đầu ra
Dấu thời gian1602923743. 12345Ghi chú cá nhân của tôi arrow_drop_up
Tiết kiệm