2013-03-21 26 views
5

Tôi cần đối tượng ngày có thời gian là 12:00:00 cho ngày hiện tại (nghĩa là không có giây). Tôi đang chuyển đổi nó thành số giây và truyền nó trong một hàm khác. Nó cuối cùng được sử dụng cho một bộ lọc báo cáo bằng cách sử dụng ngày = "someDateHere" khỏi cơ sở dữ liệu, và các giây treo trong lĩnh vực này đang vặn vẹo báo cáo. chức năng - để trống nó sẽ sử dụng thời gian hiện tại, đó là những gì tôi không muốn.Tôi không thể tìm thấy ví dụ hoặc bất cứ điều gì trong php doc.Nếu có một chức năng mà sẽ làm công việc, tôi mở để gợi ý. nên đơn giản, nhưng nó được ám chỉ tôiTạo ngày tháng đối tượng php không có giây

 date_default_timezone_set('America/Detroit'); 
     $now = date("Y-m-d 0:0:0"); 
     echo $now . '<br/>'; 
     $now = time($now,0); 
     echo $now . '<br/>'; 

Cảm ơn trước

chỉnh sửa:.. Xin lưu ý: tôi cần phải chuyển đổi đối tượng ngày t o giây. Đó là nơi dấu thời gian đang vặn tôi với hàm strtotime và chức năng thời gian. Mặc dù tôi đang chuyển nó một dateobject mà không cần dấu thời gian, chuyển đổi nó thành giây không thuận tiện khi chèn dấu thời gian làm thông số thứ hai mặc định là thời gian hiện tại.

+1

thời gian() không có đối số. những gì bạn đang làm là vô nghĩa. tại sao không chỉ 'strtotime (ngày ('Y-m-d'))' để có được dấu thời gian unix cho nửa đêm? –

+0

strtotime thêm dấu thời gian. – Cymbals

Trả lời

6

Có rất nhiều tùy chọn sẵn có tại đây, vì PHP chấp nhận nhiều định dạng thời gian khác nhau.

$midnight = strtotime('midnight'); 
$midnight = strtotime('today'); 
$midnight = strtotime('12:00am'); 
$midnight = strtotime('00:00'); 
// etc. 

Hoặc trong DateTime dạng:

$midnight = new DateTime('midnight'); 
$midnight = new DateTime('today'); 
$midnight = new DateTime('12:00am'); 
$midnight = new DateTime('00:00'); 
// etc. 

Xem time formatsrelative formats trong cuốn hướng dẫn cho một danh sách đầy đủ các định dạng với mô tả.

+0

Nhưng làm thế nào để tôi nhận được nó trong vài giây kể từ ngày 1 tháng 1 năm 1970 mà không liên quan đến dấu thời gian? – Cymbals

+0

Huh? Đối với các ví dụ 'strtotime()', '$ midnight' là dấu thời gian là số giây kể từ ngày 1 tháng 1 năm 1970. Đối với các ví dụ' DateTime', sử dụng ['getTimestamp()'] (http://php.net /datetime.gettimestamp) (hoặc ['format ('U')'] (http://php.net/datetime.format) trên các PHP cũ hơn). – salathe

+0

Cuối cùng câu trả lời này và bình luận tiếp theo đã cho tôi nơi tôi cần phải đi. Tôi đã tìm hiểu thêm về cách xử lý dấu thời gian và đối tượng DateTime hơn so với tài liệu php, vì vậy trong khi các câu trả lời hiện tại khác cũng hoạt động (cảm ơn bạn!), Tôi đánh dấu điều này là chính xác. – Cymbals

0

tôi nghĩ rằng mktime() chỉ là những gì bạn cần http://www.php.net/manual/en/function.mktime.php

<?php 
// Set the default timezone to use. Available as of PHP 5.1 
date_default_timezone_set('UTC'); 

// Prints: July 1, 2000 is on a Saturday 
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000)); 

// Prints something like: 2006-04-05T01:02:03+00:00 
echo date('c', mktime(1, 2, 3, 4, 5, 2006)); 
?> 
+0

mktime yêu cầu tôi biết ngày nào. Tôi cần ngày hiện tại. – Cymbals

+1

nếu bạn đọc các tài liệu phù thủy tôi liên kết với bạn sẽ thấy rằng các đối số có thể được trái ra theo thứ tự từ phải sang trái; bất kỳ đối số nào được bỏ qua sẽ được đặt thành giá trị hiện tại theo ngày giờ địa phương. –

+0

Ah, ok- vì vậy tôi có thể bỏ ngày và đặt thời gian đến nửa đêm. Không thấy/biết điều đó. Mát mẻ. Cảm ơn bạn! :) – Cymbals

2

Ồ, tôi muốn ngừng sử dụng những chức năng hoàn toàn, và bắt đầu tận dụng những lớp DateTime!

$date = new DateTime("now", new DateTimeZone("America/Detroit")); 
echo $date->format("Y-m-d"); 

http://php.net/manual/en/class.datetime.php

+0

rao giảng, anh trai! –

+0

Nhưng làm thế nào để tôi nhận được nó trong vài giây kể từ ngày 1 tháng 1 năm 1970 mà không liên quan đến dấu thời gian? – Cymbals

1

thời gian() không có đối số. những gì bạn đang làm là vô nghĩa. tại sao không chỉ strtotime(date('Y-m-d')) để có được dấu thời gian unix cho nửa đêm?

+0

strtotime (chuỗi $ time [, int $ now = time()]) bao gồm dấu thời gian – Cymbals

+1

. Định dạng thời gian nội bộ của php là một dấu thời gian unix: giây kể từ tháng 1/1970 utc. bạn không thể thoát khỏi điều này. tất cả những gì bạn có thể làm là đảm bảo rằng dấu thời gian bạn đại diện cho nửa đêm của ngày bạn muốn, có nghĩa là yyyy-mm-hh 00:00:00. –

+0

Ok, cảm ơn bạn cho nửa thứ hai của nhận xét đó. Tôi đang upvoting phản ứng này. – Cymbals

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