2008-12-11 28 views
6

Tôi có bảng mysql dựa trên dấu chấm thời gian unix tương đương với ngày nhập để sắp xếp và lọc trong các phần khác nhau của trang web. Tôi đang cố triển khai bộ chọn ngày sẽ nhập ngày vào trường biểu mẫu ở định dạng dd/mm/yyyy. Tôi đã đấu tranh với việc chuyển đổi ngày đó thành định dạng epoch unix để thêm mục nhập đó vào trường hàng. Tất cả những nỗ lực tôi đã thực hiện đã dẫn đến việc tạo ra tem thời gian ngày hiện tại. Có ai có bất kỳ ý tưởng làm thế nào tôi có thể lấy định dạng ngày và chuyển đổi trong tem thời gian tương đương của nó?mm/dd/yyyy định dạng epoch với PHP

Xin cảm ơn trước.

thông tin bổ sung:

Tôi đã cố gắng mktime, và tất cả tôi nhận được là ngày nay thời đại. Xin lỗi, tôi nên có thêm một số mã trước đó để giải thích rõ hơn:

Dạng id là "ngày" Các lĩnh vực cơ sở dữ liệu là "kỷ nguyên"

Dưới đây là những gì tôi đang cố gắng (không thành công) khi tôi đăng bài cho ngày :

$epochhold = ($_POST['date']); 
$epoch = mktime(0,0,0,$epochhold); 

tôi hiểu từ một bài trước rằng đây vẫn sẽ nộp giá trị như mm/dd/yyyy và không mm, dd, yyyy như mktime hy vọng, tuy nhiên bài viết không cung cấp và nghị quyết về làm thế nào để làm việc đó đi. Tôi đã thử một str_replace để thay đổi "/" để "," và rằng yeilded cùng một kết quả - nhận ngày kỷ nguyên ngày nay bất kể ngày nhập vào.

Dưới đây là rằng ví dụ mã - một lần nữa điều này không làm việc, nhưng tôi thêm nó vào giúp minh họa những gì tôi đã cố gắng

$epochhold = ($_POST['date']); 
$epochold2 = str_replace('/', ', ', $epochhold) 
$epoch = mktime(0,0,0,$epochhold2); 

Cảm ơn đã phản ứng trước là tốt, tôi không muốn nhanh chóng trả lời để đi không được chú ý!

Cảm ơn mọi người!

Cảm ơn mọi người đã trả lời - strtotime dường như hoạt động tốt nhất trong các thử nghiệm ban đầu và có thể là cách để đi vì định dạng này nhất quán trên toàn bộ trang web. Nhưng tất cả các đề xuất đã giúp với điều này một vài điều khác tất cả cũng rất cảm ơn tất cả các bạn một lần nữa!

+0

Bạn sẽ phải phân tích $ epochhold thành 3 biến và sau đó chuyển tất cả ba thành mktime. Bạn không thể vượt qua một đối số và mong đợi PHP chia nó thành ba! Tôi muốn đề nghị chức năng split(). –

Trả lời

9

Nếu bạn biết rằng nó sẽ luôn ở định dạng đó, strtotime sẽ chuyển nó trực tiếp thành dấu thời gian unix.

strtotime($_POST['app_date']); 

HTH!

+0

Ngoài ra, đừng quên xác thực đầu vào: strtotime ('15/05/2008 ') là 'FALSE', không phải' 1210802400'. – Piskvor

+0

strtotime là bộ cân bằng tuyệt vời của các ngày trong PHP – TravisO

2

Bạn nên xem hàm mktime(). Cặp đôi có biểu thức chính quy hoặc strtotime() và bạn sẽ có nó.

0
if (! preg_match('#\d{2}/\d{2}/\d{4}#', $_POST['date'])) { 
    // complain about invalid input 
} 

list($m, $d, $y) = explode('/', $_POST['date']); 
$timestamp = mktime(0, 0, 0, $m, $d, $y); 
0

Bạn sẽ cần gửi dd, mm, yyyy như các vars riêng biệt cho mktime. Giá trị trong $ epochold2 là một chuỗi không hợp lệ đối với mktime.

Đặt cược tốt nhất của bạn sẽ là sử dụng strtotime như tôi đã đề cập trước đó hoặc theo lời khuyên của Ant P bằng cách sử dụng mktime.

0

strtotime() sẽ phân tích cú pháp về bất kỳ định dạng ngày nào và trả lại dấu thời gian Unix.Tất cả bạn phải làm là vượt qua nó chuỗi ngày/giờ của bạn:

$unix_time = strtotime($_POST['date']); 
if($unix_time < 0) { 
    //error case 
} 
else { 
    //value OK! 
} 

Như bạn thấy ở trên, bạn thậm chí có thể sử dụng nó để giúp xác nhận đầu vào - nếu người dùng nhập một ngày như 2008/02/31, nó sẽ trả về -1.

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