it-swarm-vi.tech

Chuyển đổi định dạng ngày yyyy-mm-dd => dd-mm-yyyy

Tôi đang cố gắng chuyển đổi một ngày từ yyyy-mm-dd sang dd-mm-yyyy (nhưng không phải bằng 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?

436
matthy

Sử dụng strtotime()date():

$originalDate = "2010-03-21";
$newDate = date("d-m-Y", strtotime($originalDate));

(Xem tài liệu strtotimengày 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 class để phân tích và định dạng :-)

960
richsage

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 cung cấp 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à "Y-m-d" (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
?>
249
ceiroa

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.

68
Tim Lytle
$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.

33
Alper Sarı

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 :)

26
Gabriel
$timestamp = strtotime(your date variable); 
$new_date = date('d-m-Y', $timestamp);

Để biết thêm, hãy xem tài liệu cho strtotime .

Hoặc thậm chí ngắn hơn:

$new_date = date('d-m-Y', strtotime(your date variable));
26
Kevin

Lưu ý: Vì câu trả lời của bài đăng này đôi khi được nâng cấp, tôi quay lại đây để vui lòng yêu cầu mọi người không nâng cấp 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 thực sự không chính xác!

PHP hướng dẫn sử dụng strtotime tại đâ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ư "m-d-Y" hoặc "m/d/Y".

Điều đó có nghĩa là một ngày được cung cấp là "Y-m-d" 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
17
Igor Donin

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');
14
Raja Ram T

Bạn có thể thử chức năng strftime() . Ví dụ đơn giản: strftime($time, '%d %m %Y');

9
Sinan

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);
}
8
Juancho Ramone

Được đưa ra dưới đây là PHP mã để tạo ngày mai bằng cách sử dụng mktime() và thay đổi định dạng của nó thành dd/mm/yyyy 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);
7
Vishnu
date('m/d/Y h:i:s a',strtotime($val['EventDateTime']));
5
AbdulBasit

Đố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.

0
Don't Panic

Cách đơn giản Sử dụng strtotime()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));
0
Sani Kamal