PHP에서 날짜 형식 변환


489

날짜를에서로 변환하려고 yyyy-mm-dd합니다.dd-mm-yyyy (SQL이 아닌) . 그러나 날짜 함수에 타임 스탬프가 어떻게 필요한지 알지 못하고이 문자열에서 타임 스탬프를 얻을 수 없습니다.

이것이 어떻게 가능한지?


21
dd-mm-yyyy는 최소한 사용자에게 데이터를 제공해야 할 때 유럽 대부분의 표준 형식입니다.
Matteo Riva

7
호주와 뉴질랜드에서도 dd-mm-yyyy
Jonathan Day

2
미국에서 mm-dd-yyyy. @stesch : 전자는 SQL의 표준입니다. 모든 국가 에서 표준 인지 확실하지 않습니다 . :)
Herbert

10
실제로, 표준ISO 8601 에 따라 yyyy-mm-dd 입니다.
Jezen Thomas

7
전역 "표준"은 yyyy-mm-dd이며 가능하면 항상 시스템에서 사용해야합니다. order day, month, year는 대부분의 세계 사람들이 사용하지만 (미국 제외) 일반적으로 하이픈이 아닌 슬래시가 사용됩니다. 혼동을 피하기 위해 YYYY-MM-DD 만 하이픈으로 구분합니다. 다른 날짜 형식은 슬래시로 구분합니다. 이는 일관된 상태를 유지합니다.
rjmunro

답변:


1055

사용 strtotime()date():

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

( PHP 사이트 의 strtotime날짜 문서를 참조하십시오 .)

이것은 원래 질문에 대한 빠른 해결책이었습니다. 더 광범위한 변환을 위해서는 DateTime클래스를 사용하여 구문 분석하고 형식을 지정해야합니다 :-)


14
mySQL에서이 날짜 0000-00-00을 받으면 어떻게합니까? 그것은 1969
Enrique

3
@ Enrique : MySQL에서 000-00-00을 얻는다면 변환을 완료하기 전에 먼저 FIRST에 대해 테스트해야합니다. 단순함.
ShadowStorm

1
@SobinAugustine et al : strtotime ()은 날짜 문자열을 "Unix 타임 스탬프 (1970 년 1 월 1 일 00:00:00 UTC 이후의 초 수)"로 변환 한 다음 date () 형식을 이해하고 변환합니다. 따라서 이것은 1970 년 이전의 타임 스탬프에서는 작동하지 않습니다.
Samuel Lindblom

1
@SamuelLindblom 아니, 그것의하지 그런 식으로, 그것은 전에 1970 작동합니다
Sobin 어거스틴

1
@SobinAugustine : 맞습니다. 그러나 1901-12-14 이전에는 작동하지 않으므로 위에 나열된 날짜가 작동하지 않는 이유에 여전히 적용됩니다.
Samuel Lindblom

271

strtotime 변환을 피하려면 (예 : strtotime이 입력을 구문 분석 할 수 없음) 사용할 수 있습니다.

$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('d-m-Y');

또는 동등하게 :

$newDateString = date_format(date_create_from_format('Y-m-d', $dateString), 'd-m-Y');

먼저 $ dateString의 형식을 지정합니다. 그런 다음 $ newDateString을 원하는 형식으로 지정합니다.

또는 소스 형식이 항상 "Ymd"(yyyy-mm-dd)이면 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
?>

17
감사합니다 DateTime::createFromFormat()-그것은 실제로보다 유용합니다strtotime()
Gtx

2
주의 : 처음 두 가지 방법에는 PHP 5.3 이상이 필요합니다.
Salman von Abbas

새로운 DateTime 옵션에 감사드립니다. 그것은 효과가 있었고 매우 깨끗한 옵션이었습니다.
Nina Morena

1
strtotime()트루 타입 형식 (Ymd)을 다른 형식으로 변환하는 데 유용 하지만 DateTime::createFromFormat()보편적입니다. 그것은 STR_TO_DATEMySQL 과 같습니다
Taron Saribekyan

이건 정말 나를 위해 일했습니다. 헛소리 대신strtotime()
Code Cooker

72

사용하다:

implode('-', array_reverse(explode('-', $date)));

날짜 변환 오버 헤드가 없으면 크게 중요하지 않습니다.


응, 네가 제출 한대로 대답 했어 물론 strtotime에서 발견 된 오류 검사는 유용 할 수 있습니다.
Tim Lytle

2
미국 이외의 날짜 형식을 변환하는 데 유용했습니다 ... dd-mm-yyyy => yyyy-mm-dd php.net/manual/en/datetime.formats.date.php
Chris Jacob

5
이 답변에 투표가 적은 이유를 이해하지 마십시오. 최고 투표 답변이어야합니다. 문제없이 간단하고 신속하게 문제를 해결합니다. 감사합니다
Naeem Ul Wahhab

2
날짜 형식을 원래 형식으로 되돌려 야하는 경우 다시 호출 할 수도 있습니다. 실제로 가장 좋은 답변입니다. :)
Pedro Araujo Jorge Jorge

1
이것은 수락 된 답변으로 변경되어야하며 날짜 및 날짜 형식 사용의 모든 날짜-시간 문제를 해결합니다.
Matteo Bononi 'peorthyr'11

38
$newDate = preg_replace("/(\d+)\D+(\d+)\D+(\d+)/","$3-$2-$1",$originalDate);

이 코드는 모든 날짜 형식에 적용됩니다.

이전 날짜 형식으로 인해 $ 3- $ 1- $ 2와 같은 대체 변수의 순서를 변경할 수 있습니다.


정말 고마워요!
Lê Văn Chiến

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

자세한 내용은의 설명서를strtotime 참조하십시오 .

또는 더 짧습니다.

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

27

또 다른 모호한 가능성 :

$oldDate = '2010-03-20'
$arr = explode('-', $oldDate);
$newDate = $arr[2].'-'.$arr[1].'-'.$arr[0];

나는 그것을 사용할지 모르겠지만 여전히 :)


1
우리의 응용 프로그램에서 필드 (일, 월, 년) 중 하나를 알 수 없으면 사람들이 "99"를 입력하기 때문에 이것을 사용했습니다. 데이터에 "가짜"날짜가있는 경우 좋은 방법입니다.
부두 부두

18

참고 :이 게시물의 답변이 때로는 투표를 받기 때문에 사람들이 더 이상 투표하지 않도록 친절하게 요청했습니다. 내 대답은 고대이며 기술적으로 정확하지 않으며 여기에 몇 가지 더 나은 접근법이 있습니다. 역사적인 목적으로 만 여기에 보관하고 있습니다.

이 문서는 strtotime 함수를 잘 설명하지 않았지만 @rjmunro는 그의 의견에서이 문제를 올바르게 해결했습니다. ISO 형식 날짜는 "YYYY-MM-DD"입니다.

또한 Date_Converter 함수가 여전히 작동하더라도 아래에 부정확 한 진술이있을 수 있음을 경고하고 싶습니다. 무시하십시오.

가장 투표 된 답변이 실제로 잘못되었습니다!

는 PHP strtotime으로 매뉴얼은 여기 "함수 예상하는이 영어 날짜 형식을 포함하는 문자열을 제공 할"고 주장한다. 실제로 의미하는 것은 "mdY"또는 "m / d / Y"와 같은 미국식 미국 날짜 형식을 예상한다는 것입니다.

이는 "Ymd"로 제공된 날짜가 다음과 같이 잘못 해석 될 수 있음을 의미합니다. strtotime . 예상 형식으로 날짜를 제공해야합니다.

여러 형식으로 날짜를 반환하는 작은 함수를 작성했습니다. 마음대로 사용하고 수정하십시오. 누군가 그것을 수업으로 바꾸면 공유 할 수 있다면 기쁠 것입니다.

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

2
읽기, 나는 Ceiroa 수정을 좋아합니다. 그것은 날짜를 폭발 / 내포하는 것보다 훨씬 쉽습니다.
Igor Donin

3
정답은 정확하지 않습니다. PHP는 ISO 형식 날짜 "YYYY-MM-DD"로 올바른 작업을 수행합니다. 시작시 4 자리 숫자를 갖기 때문에 미국 날짜로 잘못 해석 할 수 없으며 /를 구분 기호로 사용하지 않습니다. ISO 날짜는 다른 형식과 혼동되지 않도록 신중하게 설계되었습니다.
rjmunro

14

이를 구현하는 두 가지 방법이 있습니다.

1.

    $date = strtotime(date);
    $new_date = date('d-m-Y', $date);

2.

    $cls_date = new DateTime($date);
    echo $cls_date->format('d-m-Y');

9

당신은 strftime()기능을 시도 할 수 있습니다 . 간단한 예 :strftime($time, '%d %m %Y');


8

이 기능을 사용하여 모든 형식에서 모든 형식으로 변환

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);
}

7

다음은 PHP 코드를 사용하여 내일 날짜를 생성 mktime()하고 형식을 dd / mm / yyyy 형식 으로 변경 한 다음를 사용하여 인쇄하는 PHP 코드 echo입니다.

$tomorrow = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y"));
echo date("d", $tomorrow) . "/" . date("m", $tomorrow). "/" . date("Y", $tomorrow);


2

date () 및 strtotime ()을 사용하여 형식을 변경할 수 있습니다.

$ date = '9/18/2019';

에코 날짜 ( 'dm-y', strtotime ($ date));

결과:

18-09-19

(dmy)를 변경하여 형식을 변경할 수 있습니다.


1

이 특정 변환을 위해 형식 문자열을 사용할 수도 있습니다.

$new = vsprintf('%3$s-%2$s-%1$s', explode('-', $old));

분명히 이것은 다른 많은 날짜 형식 변환에는 작동하지 않지만이 경우 하위 문자열을 다시 정렬하기 때문에 가능한 또 다른 방법입니다.


2019-10-28T17 : 02 : 49Z를 타임 스탬프로 변환하는 방법?
Bogdan Bogdanov

1
사용하십시오 strtotime(). :-)
당황하지 마십시오

1
    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

0

간단한 방법 사용 strtotime()date():

$original_dateTime = "2019-05-11 17:02:07"; #This may be database datetime
$newDate = date("d-m-Y", strtotime($original_dateTime));

시간과 함께

$newDate = date("d-m-Y h:i:s a", strtotime($original_dateTime));

0

사용 date_createdate_format

이 시도.

function formatDate($input, $output){
  $inputdate = date_create($input);
  $output = date_format($inputdate, $output);
  return $output;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.