2011-01-22 44 views
10

tôi đã cố gắngLàm thế nào tôi có thể nhận được dấu thời gian hiện nay trong PHP

$dtToday = DateTime::createFromFormat('Y-m-d', date('Y-m-d')); 

nhưng khi tôi ra nó

die($dtToday->format('d M Y g:i:s a')); 

tôi vẫn nhận được thời gian ví dụ: "22 Tháng 1 2011 16:53:59". Tại sao vậy?

CẬP NHẬT

Ah ... nhiều người hiểu lầm tôi, xấu của tôi, tôi quên để chỉ ra những điểm chính. Tôi đã tạo ngày chỉ với phần ngày tháng, tôi không muốn thời gian. Vì vậy, tôi mong đợi một cái gì đó giống như

22 Jan 2011 12:00:00 am 
+0

Bạn đã yêu cầu ngày được trả lại như 'd MY g: i: sa' vậy có gì sai với đầu ra? –

+0

@Salman A, tôi đã tạo ngày tháng với thời gian, vì vậy tôi mong đợi thời gian là 12:00:00 sáng? –

+0

OK, tôi đã đăng câu trả lời –

Trả lời

11

OK, tôi thừa nhận rằng tôi không quen thuộc với lớp DateTime. Nhưng tôi chắc chắn nó cung cấp các phương thức như setHour, setMinute vv mà bạn có thể sử dụng để không ra phần thời gian. Cá nhân, tôi muốn tạo ngày với mktime() chức năng:

echo date("Y-m-d H:i:s", // this line is for demonstration 
    mktime(0, 0, 0)  // this generates a timestamp which can be used in most date functions 
          // first three parameters are hour, minute, second which I set to 0 
          // remaining parameters are optional 
          // infact all parameters are optional and all parameters default to corresponding portion of the *current* date/time 
); 
5

Bạn có thể làm điều này bằng cách truyền unix timestamp hiện như tham số thứ hai đến chức năng ngày

echo date("Y-m-d H:i:s",time()); 
+4

tham số thứ hai cho ngày() mặc định là time(), vì vậy ngày ('Y-m-d') là đủ. – gregjor

+0

thực sự không phải là định dạng, xem cập nhật của tôi. Về cơ bản tôi hỏi tại sao sau khi tạo DateTime chỉ với ngày trừ đi phần thời gian, tại sao tôi vẫn nhận được thời gian? Tôi muốn ngày mà không có phần thời gian –

0

Có sử dụng UTC, hoặc một cái gì đó?

Tôi có phiên bản PHP cung cấp cho tôi lỗi bất cứ khi nào tôi làm điều gì đó date liên quan mà không sử dụng lần đầu tiên date_default_timezone_set. Có lẽ điều đó sẽ giúp bạn.

0

Xóa phần này g:i:s a khỏi mã của bạn.

Bây giờ, nếu bạn muốn có một ngày đẹp được định dạng theo địa phương của bạn, tôi khuyên bạn nên sử dụng chức năng strftime().

+0

Xin lỗi, ý tôi là tại sao sau khi tạo DateTime mà không có phần thời gian, tại sao tôi vẫn nhận được thời gian? –

1

Bạn đang nhận được "22 tháng 1 năm 2011 04:53:59" vì đó là những nguyên tắc mà bạn định dạng ngày của bạn với:
d (ngày): 22
M (Tháng): Jan
Y (Năm): 2011 định dạng
g (12 giờ): 4
i (phút): 53
s (giây): 59
một (sáng/chiều): pm
Hãy speciffic thêm về định dạng sẽ bạn như dấu thời gian của bạn. Tôi đề nghị bạn lấy một đỉnh ở tài liệu php date.

+0

Xin lỗi, ý tôi là tại sao sau khi tạo DateTime mà không có phần thời gian, tại sao tôi vẫn nhận được thời gian? –

12

Xem tài liệu cho DateTime::createFromFormat:

Nếu định dạng không chứa ký tự! sau đó các phần của thời gian được tạo không được chỉ định ở định dạng sẽ được đặt thành thời gian hệ thống hiện tại.

Nếu bạn làm như gọi hàm sau đây, bạn sẽ nhận được kết quả bạn mong đợi:

$dtToday = DateTime::createFromFormat('!Y-m-d', date('Y-m-d')); 
5

hôm nay bắt đầu timestamp

$today_start_ts = strtotime(date('Y-m-d', time()). '00:00:00'); 
+0

nó phải là '00:00:00' Đừng quên không gian. – modu

+0

Đây phải là câu trả lời được chấp nhận. –

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