2011-12-22 31 views
18

Lớp DateTime chắc chắn có một số phương pháp tiện dụng và có vẻ vượt trội so với các hàm ngày gốc php như strtotime, mktimestrftime (và hơn thế nữa). Nhưng có bất kỳ nhược điểm nào hay lý do tại sao tôi không nên sử dụng nó?Lớp DateTime so với các hàm ngày gốc PHP

Lý do duy nhất tôi có thể nghĩ là có thể tốn kém hơn để tạo ra toàn bộ thể hiện của một lớp hơn là chỉ sử dụng một hàm.

  • Bạn có đồng ý với điều đó không?
  • Có ý nghĩa gì đối với chúng tôi đối tượng DateTime cho các công cụ đơn giản không?
  • Có bất kỳ hạn chế nào khác không?

Có vẻ như hơi khó hiểu khi chuyển đổi giữa hai tùy chọn này mọi lúc, vì vậy tôi muốn giải phóng những gì tôi nên làm.

Hai ví dụ cho quyết định của tôi sẽ là:

  • Chuyển đổi một ngày đến một giá trị khu trú
  • Tính toán thời gian giữa hai thời điểm

Trả lời

36

Nếu lo lắng của bạn được rằng việc tạo một cá thể của lớp là tốn kém và nó sẽ cản trở hiệu suất, sau đó tôi sợ bạn đang sủa cây sai. Người ta không bao giờ nên xem xét liệu có nên sử dụng phương pháp OO đã được chứng minh ở nơi có ý nghĩa hay không. Nếu sử dụng lớp DateTime có ý nghĩa để thực hiện các phép tính ngày tháng nhất định, sau đó sử dụng nó. Nó không tốn kém đến mức mà ứng dụng của bạn sẽ cảm thấy nó, trừ khi bạn làm điều gì đó điên rồ như tạo ra 1 triệu đối tượng DateTime.

Lý do tại sao DateTime là tuyệt vời là vì nó làm giảm bớt sự lo lắng về tiết kiệm ánh sáng ban ngày bằng cách xác định múi giờ khi tạo đối tượng. Nó cũng dễ dàng để có được sự khác biệt giữa các ngày hoặc có được khoảng thời gian giữa các đối tượng khác nhau. Về cơ bản nó cắt giảm số lượng lo lắng và mã hóa cần thiết (nhưng tôi sẽ thừa nhận nó là sai đôi khi, hy vọng nó sẽ được giải quyết trong bản phát hành 5,4 PHP).

Dòng dưới cùng - tôi luôn sử dụng nó.

+5

cộng với phạm vi ngày, ngay cả trong môi trường PHP 32-bit, là đủ để giữ một nhà cổ sinh học hoặc nhà vũ trụ học nghiên cứu đầu hoặc cuối vũ trụ hạnh phúc –

+0

Tôi thấy 'tiện dụng' của DateTime, nhưng bạn cũng sẽ sử dụng nó cho những thứ đơn giản như những gì tôi vừa thêm vào câu hỏi của tôi? – Anonymous

+4

Tôi muốn, vì chúng ta có các hàm 'mktime' hoặc' strtotime' - chúng yêu cầu thứ tự các tham số nhất định đại diện cho ngày, năm, tháng, giờ vv. Với 'DateTime', tôi có thể tạo đối tượng bằng cách sử dụng các tham số tùy ý như' $ date = DateTime :: createFromFormat ('m H: s D-Y', $ weird_user_input); 'mà sau đó có thể được định dạng thành dấu thời gian unix hoặc bất kỳ định dạng ngày nào khác mà tôi muốn. Tôi thậm chí có thể xác định múi giờ ngay lập tức trong khi tạo đối tượng. Vì vậy, có, tôi chắc chắn sẽ sử dụng nó vì tôi không thực sự thấy cách thủ tục sẽ giúp tôi tốt hơn. –

Các vấn đề liên quan