Tôi cố gắng để chuyển đổi một ngày từ yyyy-mm-dd
đến dd-mm-yyyy
(nhưng không phải trong SQL); tuy nhiên tôi không biết hàm ngày yêu cầu dấu thời gian như thế nào và tôi không thể lấy dấu thời gian từ chuỗi này.
Sao có thể như thế được?
Tôi cố gắng để chuyển đổi một ngày từ yyyy-mm-dd
đến dd-mm-yyyy
(nhưng không phải trong SQL); tuy nhiên tôi không biết hàm ngày yêu cầu dấu thời gian như thế nào và tôi không thể lấy dấu thời gian từ chuỗi này.
Sao có thể như thế được?
Câu trả lời:
Sử dụng strtotime()
và date()
:
$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));
(Xem strtotime và ngày tài liệu trên trang web PHP.)
Lưu ý rằng đây là một giải pháp nhanh chóng cho câu hỏi ban đầu. Để chuyển đổi rộng rãi hơn, bạn thực sự nên sử dụng DateTime
lớp để phân tích và định dạng :-)
Nếu bạn muốn tránh chuyển đổi strtotime (ví dụ: strtotime không thể phân tích cú pháp đầu vào của bạn), bạn có thể sử dụng,
$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');
Hoặc, tương đương:
$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');
Trước tiên, bạn cho nó định dạng $ dateString. Sau đó, bạn đang nói với nó định dạng mà bạn muốn $ newDateString ở trong đó.
Hoặc nếu định dạng nguồn luôn là "Ymd" (yyyy-mm-dd), thì chỉ cần sử dụng DateTime :
<?php
$source = '2012-07-31';
$date = new DateTime($source);
echo $date->format('d.m.Y'); // 31.07.2012
echo $date->format('d-m-Y'); // 31-07-2012
?>
DateTime::createFromFormat()
- nó thực sự hữu ích hơnstrtotime()
strtotime()
hữu ích để chuyển đổi định dạng loại thực (Ymd) sang các định dạng khác, nhưng DateTime::createFromFormat()
là phổ biến. Giống như STR_TO_DATE
trong MySQL
strtotime()
Sử dụng:
implode('-', array_reverse(explode('-', $date)));
Nếu không có chi phí chuyển đổi ngày, tôi không chắc nó sẽ quan trọng lắm.
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);
Mã này hoạt động cho mọi định dạng ngày.
Bạn có thể thay đổi thứ tự của các biến thay thế như $ 3- $ 1- $ 2 do định dạng ngày cũ của bạn.
$timestamp = strtotime(your date variable);
$new_date = date('d-m-Y', $timestamp);
Để biết thêm, xem tài liệu chostrtotime
.
Hoặc thậm chí ngắn hơn:
$new_date = date('d-m-Y', strtotime(your date variable));
Ngoài ra một khả năng tối nghĩa khác:
$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];
Tôi không biết nếu tôi sẽ sử dụng nó nhưng vẫn :)
Lưu ý : Vì câu trả lời của bài đăng này đôi khi được nêu lên, tôi đã quay lại đây để vui lòng yêu cầu mọi người không nêu lên nó nữa. Câu trả lời của tôi là cổ xưa, không đúng về mặt kỹ thuật, và có một số cách tiếp cận tốt hơn ngay tại đây. Tôi chỉ giữ nó ở đây cho mục đích lịch sử.
Mặc dù tài liệu mô tả kém về chức năng strtotime, @rjmunro đã giải quyết chính xác vấn đề trong nhận xét của mình: đó là định dạng ISO ngày "YYYY-MM-DD".
Ngoài ra, mặc dù chức năng Date_Converter của tôi vẫn có thể hoạt động, tôi muốn cảnh báo rằng có thể có các tuyên bố không chính xác bên dưới, vì vậy vui lòng bỏ qua chúng.
Câu trả lời được bình chọn nhiều nhất là thực sự không chính xác!
Hướng dẫn sử dụng chuỗi thời gian PHP ở đây nói rằng "Hàm dự kiến sẽ được cung cấp một chuỗi chứa định dạng ngày tiếng Anh". Điều thực sự có nghĩa là nó mong đợi một định dạng ngày ở Mỹ, chẳng hạn như "mdY" hoặc "m / d / Y".
Điều đó có nghĩa là một ngày được cung cấp là "Ymd" có thể bị hiểu sai bởi strtotime
. Bạn nên cung cấp ngày ở định dạng dự kiến.
Tôi đã viết một chức năng nhỏ để trả về ngày ở một số định dạng. Sử dụng và sửa đổi theo ý muốn. Nếu bất cứ ai biến điều đó thành một lớp học, tôi sẽ rất vui nếu điều đó được chia sẻ.
function Date_Converter($date, $locale = "br") {
# Exception
if (is_null($date))
$date = date("m/d/Y H:i:s");
# Let's go ahead and get a string date in case we've
# been given a Unix Time Stamp
if ($locale == "unix")
$date = date("m/d/Y H:i:s", $date);
# Separate Date from Time
$date = explode(" ", $date);
if ($locale == "br") {
# Separate d/m/Y from Date
$date[0] = explode("/", $date[0]);
# Rearrange Date into m/d/Y
$date[0] = $date[0][1] . "/" . $date[0][0] . "/" . $date[0][2];
}
# Return date in all formats
# US
$Return["datetime"]["us"] = implode(" ", $date);
$Return["date"]["us"] = $date[0];
# Universal
$Return["time"] = $date[1];
$Return["unix_datetime"] = strtotime($Return["datetime"]["us"]);
$Return["unix_date"] = strtotime($Return["date"]["us"]);
$Return["getdate"] = getdate($Return["unix_datetime"]);
# BR
$Return["datetime"]["br"] = date("d/m/Y H:i:s", $Return["unix_datetime"]);
$Return["date"]["br"] = date("d/m/Y", $Return["unix_date"]);
# Return
return $Return;
} # End Function
Có hai cách để thực hiện điều này:
1.
$date = strtotime(date);
$new_date = date('d-m-Y', $date);
2.
$cls_date = new DateTime($date);
echo $cls_date->format('d-m-Y');
Bạn có thể thử strftime()
chức năng. Ví dụ đơn giản:strftime($time, '%d %m %Y');
Sử dụng chức năng này để chuyển đổi từ bất kỳ định dạng sang định dạng bất kỳ
function reformatDate($date, $from_format = 'd/m/Y', $to_format = 'Y-m-d') {
$date_aux = date_create_from_format($from_format, $date);
return date_format($date_aux,$to_format);
}
Dưới đây là mã PHP để tạo ngày mai bằng cách sử dụng mktime()
và thay đổi định dạng của nó thành định dạng dd / mm / yyyy và sau đó in nó bằng cách sử dụng echo
.
$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
Đối với chuyển đổi cụ thể này, chúng tôi cũng có thể sử dụng một chuỗi định dạng.
$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));
Rõ ràng điều này sẽ không hoạt động đối với nhiều chuyển đổi định dạng ngày khác, nhưng vì chúng ta chỉ sắp xếp lại các chuỗi con trong trường hợp này, đây là một cách khả thi khác để thực hiện.
strtotime()
. :-)
function dateFormat($date) {
$m = preg_replace('/[^0-9]/', '', $date);
if (preg_match_all('/\d{2}+/', $m, $r)) {
$r = reset($r);
if ($r[2] <= 12 && $r[3] <= 31) return "$r[0]$r[1]-$r[2]-$r[3]";// Y-m-d
if ($r[0] <= 31 && $r[1] != 0 && $r[1] <= 12) return "$r[2]$r[3]-$r[1]-$r[0]";// d-m-Y
if ($r[0] <= 12 && $r[1] <= 31) return "$r[2]$r[3]-$r[0]-$r[1]";// m-d-Y
if ($r[2] <= 31 && $r[3] <= 12) return "$r[0]$r[1]-$r[3]-$r[2]";//Y-m-d
}
}
var_dump(dateFormat('31/01/2000')); // return 2000-01-31
var_dump(dateFormat('01-31-2000')); // return 2000-01-31
var_dump(dateFormat('2000-31-01')); // return 2000-01-31
var_dump(dateFormat('20003101')); // return 2000-01-31
Cách đơn giản Sử dụng strtotime()
và date()
:
$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));
Với thời gian
$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));
Sử dụng date_create
vàdate_format
Thử cái này.
function formatDate($input, $output){
$inputdate = date_create($input);
$output = date_format($inputdate, $output);
return $output;
}