2009-08-14 35 views
10

Nếu tôi đã có một chuỗi ngày:PHP Parse Ngày Chuỗi

$date = "08/20/2009"; 

Và tôi muốn tách riêng từng phần của ngày:

$m = "08"; 
$d = "20"; 
$y = "2009"; 

Làm thế nào tôi sẽ làm như vậy?

Có chức năng ngày đặc biệt nào tôi nên sử dụng không? Hay cái gì khác?

Cảm ơn!

Trả lời

14

explode sẽ làm các trick cho rằng:

Ngoài ra, bạn có thể làm điều đó trong một dòng (xem bình luận - nhờ may mắn):

list($m, $d, $y) = explode("/", $date); 
+5

danh sách ($ m, $ d $ y) = explode ("/", $ date); – Lucky

+0

@Lucky - cảm ơn, đã chỉnh sửa. –

18

Một cách sẽ được để làm điều này :

$time = strtotime($date); 
$m = date('m', $time); 
$d = date('d', $time); 
$y = date('Y', $time); 
+0

ARGH! Bạn đánh bại tôi vào nó! lol – Daniel

+1

Ah, nhưng phản hồi của bạn mạnh mẽ hơn. –

+4

Strtotime không phải lúc nào cũng hoạt động do ràng buộc dấu thời gian. Giả sử bạn muốn phân tích Chiến tranh thế giới thứ nhất, bạn không thể chuyển đổi 28/08/1914 thành dấu thời gian hợp lệ. –

2

Luôn như vậy? Hoặc nó sẽ ở trong bất kỳ loại định dạng tập tin nào?

Dùng thử strtotime.

Cái gì như:

if(($iTime = strtotime($strDate))!==false) 
{ 
echo date('m', $iTime); 
echo date('d', $iTime); 
echo date('y', $iTime); 
} 
-3

câu trả lời Dominic là tốt, nhưng NẾU ngày là LUÔN trong các định dạng mà bạn có thể sử dụng này:

$m = substr($date,0,2); 
$d = substr($date,3,2); 
$y = substr($date,-4); 

và không cần phải sử dụng một mảng hoặc phát nổ

Bill H

+0

Xin vui lòng, không! Hãy suy nghĩ về trình đọc mã trong tương lai :) – GiDo

+0

Tại sao người ta muốn tránh phát nổ? * NẾU * ngày là * LUÔN * trong cùng một định dạng, phát nổ sẽ hoạt động hoàn hảo, và như @GiDo ngụ ý, sẽ tự tài liệu về mặt ý định. Nếu người ta muốn tránh mảng, thì 'liệt kê' các phần tử ra thành các biến riêng biệt. – Sepster

1

về điều này:

list($m, $d, $y) = explode("/", $date); 

Một lớp lót nhanh.

6

Kiểm tra PHP date_parse function. Trừ khi bạn chắc chắn đầu vào sẽ luôn ở định dạng nhất quán, VÀ bạn xác thực nó trước, nó ổn định hơn và linh hoạt hơn, (chưa kể dễ dàng hơn), để PHP cố gắng phân tích cú pháp định dạng cho bạn.

ví dụ:

<?php 
//Both inputs should return the same Month-Day-Year 
print_r(date_parse("2012-1-12 51:00:00.5")); 
print_r(date_parse("1/12/2012")); 
?> 
3

Nếu bạn có định dạng nhất định, bạn nên sử dụng đối tượng date.

$date = DateTime::createFromFormat('m/d/Y', '08/20/2009'); 
$m = $date->format('m'); 
$d = $date->format('d'); 
$y = $date->format('Y'); 

Lưu ý bạn chắc chắn có thể chỉ sử dụng một cuộc gọi đến DateTime::format().

$newFormat = $date->format('d-m-Y'); 
0

Đối với phân tích cú pháp ngày quốc tế hóa, xem IntlDateFormatter :: parse - http://php.net/manual/en/intldateformatter.parse.php

Ví dụ:

$f = new \IntlDateFormatter('en_gb', \IntlDateFormatter::SHORT, \IntlDateFormatter::NONE); 
$dt = new \DateTime(); 
$dt->setTimestamp($f->parse('1/2/2015'));