Cách lấy realtime tại thời điểm hiện tại trong PHP?

Hi mọi người, em đang mắc quá , cho em hỏi là :

Thứ 1, em đang tạo chức năng cơ bản thêm mới sản phẩm(tên , mô tả, giá, ngày đăng) nhưng khi thêm mới em muốn cái field ngày đăng kia nó lấy realtime tại thời điểm hiện tại luôn ạ, mà mình ko phải nhập bằng tay và cũng như không thể thay đổi thì làm sao ạ?

-Thứ 2 là, Làm sao để trong table gồm các báo cáo của nhân viên(cột tên nv, cột đơn vị công tác,cột import file) . nếu nhân viên chưa import file báo cáo lên thì cả dòng đó hiển thị màu đỏ ngĩa là chưa nộp , còn import lên rồi thì mất màu đỏ đi ạ?

em cảm ơn tất cả mọi người rất rất nhiều. hy vọng mọi người giúp dc em ạ! :heart::heart::heart:

Bạn dùng cơ sở dữ liệu MySQL? Nếu đúng, hãy tạo một trường (thử đặt tên là ngaydang) với kiểu dữ liệu là TIMESTAMP, và set giá trị mặc định CURRENT_TIMESTAMP. Khi insert bạn sẽ không nạp giá trị cho trường này trong câu SQL, tự nó sẽ lấy giờ hệ thống.

Khi nhân viên chưa import file thì trong table nhanvien bạn có 1 cột đặt cờ imported có giá trị mặc định là 0, khi ai đó import thì đặt lại giá trị nó là 1. Khi ta nạp lên hiển thị ta sẽ kiểm tra cột đó trước, nếu 0 thì hiển thị chữ đỏ, 1 thì chữ không đỏ.

3 Likes

Thứ 1, để lấy và lưu thời điểm hiện tại của lúc đăng bài, bạn có 2 cách:

  • 1 là lấy thời điểm hiện tại bằng PHP, sau đó insert thông tin này vào database
    (nếu sử dụng cách này, bạn nhớ set time zone: date_default_timezone_set("Asia/Bangkok");

  • 2 là tạo column trong database, ví dụ: ngay_dang, có default value là thời điểm hiện tại, hoặc câu query là insert thời điểm hiện tại.
    Nếu bạn chưa quen dùng mysql, hoặc xài trên nhiều hosting có nhiều version mysql mới cũ khác nhau, thì có thể sẽ hơi bực với mấy cái vấn đề date/time của thằng mysql

Cá nhân mình thì thích cái 1 hơn, vì quan điểm riêng của mình là cái nào xử lý được từ trên code thì xử lý luôn, còn database chỉ để chứa thông tin thôi (tất nhiên nó còn phải phụ thuộc vào từng trường hợp sử dụng cụ thể nữa)

Thứ 2, là trong table báo cáo của nhân viên, bạn tạo thêm column ví dụ như attachment. Khi query insert vào database, nếu có file thì insert yes, không thì insert no (hay 0 - 1, true - false gì đó).
Khi mình query vào database để lấy thông tin và hiển thị. Bạn check giá trị của cột attachment, nếu là no thì mình cho nó hiện thành màu đỏ là xong.

3 Likes

Việc lưu time dưới dạng string sẽ gặp vấn đề về timezone, đặc biệt là các timezone có DST.
Để đảm bảo client nhận đúng data thì có 2 cách:

  1. Gửi thêm timezone kèm theo.
  2. Chỉ gửi data về với 1 timezone duy nhất, client tự convert lại theo timezone của mình.

Cả 2 cách theo mình đều tốn data (lưu và gửi data dạng string) và tốn công convert, rất lằng nhằng.

Trong khi tiêu chuẩn về thời gian trong tất cả các thiết bị điện tử là TIMESTAMP.

Mình không thích dùng CURRENT_TIMESTAMP, vì:

  1. Khi get data từ MySQL lên, nó lại convert sẵn thành string, trong khi string lẽ ra chỉ là cái để hiển thị cho con người, không phải là dữ liệu để tính toán của thiết bị.
  2. Nếu vì lý do gì đó mà timezone của PHP server và MySQL server khác nhau thì sẽ có nhiều vấn đề cần giải quyết.

Hàm get unix timestamp của PHP là time(), giá trị là một số nguyên. Bạn có thể truyền nó vào, lấy nó ra gửi thẳng cho client không cần quan tâm timezone, client có thể hiển thị theo timezone của mình thế nào cũng được. Data dạng số thì ngắn, nhỏ và tìm kiếm trong MySQL cũng rất nhanh.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?