PHP를 사용하여 MySQL 날짜 시간에서 다른 형식으로 변환


447

나는이 datetimeMySQL의에서 열을.

PHP를 사용하여 디스플레이를 mm / dd / yy H : M (AM / PM)으로 어떻게 변환 할 수 있습니까?


4
우리가 알아야 할 것은 날짜가 SQL 내에 저장되는 방법입니다. Timestamp 또는 Datetime 또는 unixtime입니까?
Ólafur Waage

그들은 일반적인 날짜와 마찬가지로 유닉스 시간에 저장되지 않으며 PHP는 초 단위로 처리하는 것입니다. PHP OOPdatetime 함수 를 사용하는 것이 좋으며 사용하기 매우 쉽습니다.
구초 카

2
날짜 형식을 추천하고 대안으로 사용할 수 있습니까? mm/dd/yy미국은 매우 미국인이며 세계 다른 지역에 사는 사람들은의 의미를 다시 추측하려고 시도하는 데 약간 짜증나게됩니다 11-12-13. 보다 보편적 인 표준은 yyyy-mm-ddISO 8601 표준의 일부입니다. 실패 하면 숫자가 아닌 월 이름을 사용해야합니다 .
Manngo

답변:


515

날짜를 MySQL 형식으로 정규화하는 방법을 찾고 있다면 다음을 사용하십시오.

$phpdate = strtotime( $mysqldate );
$mysqldate = date( 'Y-m-d H:i:s', $phpdate );

$phpdate = strtotime( $mysqldate )은 문자열을 받아들이고 일련의 휴리스틱을 수행하여 해당 문자열을 유닉스 타임 스탬프로 바꿉니다.

이 라인 $mysqldate = date( 'Y-m-d H:i:s', $phpdate )은 해당 타임 스탬프와 PHP date기능을 사용하여 해당 타임 스탬프를 MySQL의 표준 날짜 형식으로 되돌립니다.

( 편집자 주 :이 답변은 혼동되는 문구가 포함 된 원래 질문과 현재 존재하는 질문에 직접 답변하지 않더라도이 답변이 제공 한 일반적인 Google 유용성으로 인해 여기에 제공됩니다)


19
이 답변은 주제를 혼동합니다
Alex K

5
@ 0xBAADF00D : 질문을 다시 읽으십시오 ... 아무도 MySQL 표준 형식에 대해 묻지 않았습니다.
user7116

3
물론 표준이 존재하면 표준을 따르는 것이 좋습니다 (다른 개발자가 코드에서 작업 할 때 두통을 피할 수 있습니다) xD
0xBAADF00D

4
이 질문은 "Ymd H : i : s"가 아니라 mm / dd / yy H : M (AM / PM) 형식으로 출력하도록 요청합니다.
Rikki

6
does not work누가? 변환 할 경우 허용 대답은 작동 에서 로 MySQL의 mm / 일 / 년 H : M (AM / PM) 영업 이익은 요청에 따라. 당신이 반대를하고 싶다고해서 대답이 잘못 받아 들여지지는 않습니다.
toxalot

311

MySQL에서 검색 한 날짜를 요청 된 형식으로 변환하려면 ( mm/dd/yy H:M (AM/PM)) :

// $datetime is something like: 2014-01-31 13:05:59
$time = strtotime($datetimeFromMysql);
$myFormatForView = date("m/d/y g:i A", $time);
// $myFormatForView is something like: 01/31/14 1:05 PM

형식을 조정 하려면 PHP 날짜 형식 옵션 을 참조하십시오 .


$row물체 는 어디 에서 왔을 까?
Mike

25
나는 틀릴 수 있지만, 당신 중 일부는 요점을 누락했다고 생각합니다. 그는 출력을 "m / d / yg : i A"형식으로 만들고 DATETIME 필드에서 원래 날짜를 가져옵니다. 그래서 그의 코드가 작동합니다. @Mike $ row-> createdate는 Tim의 날짜 시간 열입니다.
Mere Development

4
@ AsTeR 답변은 질문을 잘못 읽은 경우에만 혼란 스럽습니다. OP는 자체 질문에 답변 했으며 MySQL 에서 날짜를 가져와 요청 형식으로 출력하려고합니다 : mm / dd / yy H : M (AM / PM) .
toxalot

@ TimBoland 요청 된 형식 mm / dd / yy H : M (AM / PM) 뿐만 아니라 from 을 강조 하면 답변을 향상시킬 수 있다고 생각 합니다. 그리고 날짜 함수에 대한 링크를 통해 이점을 얻을 수 있습니다. 편집제안 하려고했지만 거부되었습니다.
toxalot

1
재미있는 사실 :이 답변은 바로 아래에있는 것과 거의 같지만 (실제로 다운 보트가 없음) OP의 질문에 답변하기 때문에> 40 개의 다운 보트를 얻습니다.
Clément

110

PHP 5를 사용하는 경우 시도해 볼 수도 있습니다

$oDate = new DateTime($row->createdate);
$sDate = $oDate->format("Y-m-d H:i:s");

위에서 언급 한 바와 같이 표준 형식은 다음과 같습니다.("Y-m-d H:i:s")
Yannickv

45
$valid_date = date( 'm/d/y g:i A', strtotime($date));

참조 : http://php.net/manual/en/function.date.php


나는 OP 질문에 대해 혼란스러워 사람들이 공감한다고 생각합니다. 대부분 실제 질문과 반대되는 질문을 읽습니다. 다른 가능성은 5 년 이상 전에 게시 된 승인 된 답변과 매우 유사하다는 것입니다.
toxalot

1
참조하는 링크가 사용중인 기능을 가리 키거나 형식을 설명하지 않습니다. php.net/function.date.php 가 더 좋을 것이라고 생각 합니다.
toxalot

@toxalot 허용되는 답변이 잘못되었습니다. 내 답변과 내 링크에 대해 편집 한 결과 링크가 바뀝니다. 감사합니다
Tony Stark

1
이 모든 Q & A는 터무니없는 역사를 가지고 있습니다. 승인 된 답변 2013 년 4 월 29 일과 2013 년 5 월 24 일 사이 잘못되었습니다. 답변을 처음 게시했을 때 정확했습니다. 귀하의 답변 2013 년 5 월 29 일까지 틀 렸으며, 그 후 답변이 수락 된 답변과 매우 유사 해졌습니다.
toxalot

23

마지막으로 PHP 5.3 이상에 적합한 솔루션 : (댓글에 언급 된대로 선택적 시간대를 예제에 추가)

$date = \DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date, new \DateTimeZone('UTC'));
$date->setTimezone(new \DateTimeZone('Europe/Berlin')); // optional
echo $date->format('m/d/y h:i a');

그 오류가 .. 클래스 '앱 \ 컨트롤러 \ 날짜 시간'하지 PHP는 6.4 ..using 발견
aswzen

1
다른 네임 스페이스에서 작업하는 경우 백 슬래시를 사용하여 해당 네임 스페이스를 호출해야합니다.\DateTime::createFromFormat('Y-m-d H:i:s', $mysql_source_date);
Hasenpriester

2
날짜 개체를 만들 때 시간대를 지정하는 것을 잊지 마십시오! 그렇지 않으면 형식화 된 날짜가 몇 시간 쉬게 될 수 있습니다. 당신의 datetime열이 너무 통과, UTF8해야 new DateTimeZone('UTC')PHP가 알고 보장하기 위해 3 매개 변수로.
Eric Seastrand 19

이것은 OP의 원하는 형식을 출력하는 정답입니다. 시간대를 관리하면됩니다
회계사 م

12

더 쉬운 방법은 PHP 대신 MySQL 쿼리에서 직접 날짜 형식을 지정하는 것입니다. DATE_FORMAT에 대한 MySQL 수동 항목을 참조하십시오 .

PHP로 작성하려면 날짜 함수 가 필요 하지만 먼저 데이터베이스 값을 타임 스탬프로 변환해야합니다.


11
DB에서 날짜 형식을 지정하는 것은 좋지 않습니다. 다국어 웹에는 다른 날짜 형식이 필요하므로 PHP (일반적으로 비즈니스 논리 언어)로 날짜를 형식화해야합니다. date함수에 대해 쓸 때 strottime"데이터베이스 값을 먼저 타임 스탬프로 변환해야합니다"대신 다른 사람을 돕기 위해 함수에 대해서도 작성해야합니다 .
Boris Šuška

10

모두 잊어 버려 그냥 사용하십시오 :

$date = date("Y-m-d H:i:s",strtotime(str_replace('/','-',$date)))

9

DateTimeMySQL에 저장하기 위해 PHP 에서 객체의 형식을 올바르게 지정하려면 MySQL이 사용하는 표준화 된 형식 ( ISO 8601)을 사용하십시오 .

PHP는 버전 5.1.1부터이 형식을 상수로 저장했으며 매번 문자열을 수동으로 입력하는 대신이 형식을 사용하는 것이 좋습니다.

$dtNow = new DateTime();
$mysqlDateTime = $dtNow->format(DateTime::ISO8601);

이것과 다른 PHP DateTime 상수 목록은 http://php.net/manual/en/class.datetime.php#datetime.constants.types 에서 확인할 수 있습니다


MySQL은 실제로이 형식을 사용하지 않으며 "+ xxxx"표준 시간대 지정자를 포함하면 MySQL에서 경고를 생성합니다. 업데이트 X 세트 Y = '2014-03-31T15 : 00 : 00 + 0100'여기서 Z; 쿼리 확인, 영향을받는 행 0 개, 경고 1 개 (0.06 초) 일치하는 행 : 1 변경 : 0 경고 : 1
George Lund

영업 이익은 날짜를 가지고 싶어 에서 MySQL의 형식과 변환을 mm / 일 / 년 H : M (AM / PM) .
toxalot

8

이것은 SQL 쿼리에서 필드의 형식을 지정해야합니다.

SELECT DATE_FORMAT( `fieldname` , '%d-%m-%Y' ) FROM tablename

모든 데이터베이스에서 작동하지는 않기 때문에 SQL뿐만 아니라 MySQL 쿼리도 지정해야 합니다. OP가 PHP 솔루션을 요청했지만 OP가 알지 못했을 수있는 좋은 대안입니다. 그러나 요청 된 형식은 제공하지 않습니다. 요청 된 형식 OP를 받으려면이 필요합니다 '%m/%d/%y %h:%i %p'.
toxalot

7

날짜 기능을 사용하십시오 .

<?php
    echo date("m/d/y g:i (A)", $DB_Date_Field);
?>

25
date () 함수가 질문에 지정된 날짜 시간이 아닌 정수 타임 스탬프를 기대하지 않습니까?
Loftx

5

MySQL 날짜 / 시간 구성에 따라 일반적으로 2011-12-31 07:55:13 형식입니다. 이 매우 간단한 함수는 마술을 수행해야합니다.

function datetime()
{
    return date( 'Y-m-d H:i:s', time());
}

echo datetime(); // display example: 2011-12-31 07:55:13

또는 질문과 일치하도록 조금 더 발전했습니다.

function datetime($date_string = false)
{
    if (!$date_string)
    {
        $date_string = time();
    }
    return date("Y-m-d H:i:s", strtotime($date_string));
}

1
이것은 OP 질문에 대답하지 않습니다. 영업 이익은 날짜를 가지고 싶어 에서 MySQL의 형식과 변환을 mm / 일 / 년 H : M (AM / PM) . 또한 이것은 특정 날짜가 아닌 현재 시간의 형식을 지정합니다.
toxalot

5
SELECT 
 DATE_FORMAT(demo.dateFrom, '%e.%M.%Y') as dateFrom,
 DATE_FORMAT(demo.dateUntil, '%e.%M.%Y') as dateUntil
FROM demo

PHP 코드의 모든 함수를 변경하지 않으려면 예상 날짜 형식을 표시하려면 소스-데이터베이스에서 변경하십시오.

as로 행 이름을 지정하는 것이 중요합니다.위 예제 연산자를 (dateFrom, dateUntil로). 거기에 쓰는 이름은 이름이며 행은 결과에서 호출됩니다.

이 예제의 출력은

[월요일, 숫자 (0..31)]. [월 이름 (1 월 ..12 월)]. [연도, 숫자, 네 자리]

예 : 5.2015 년 8 월

선택한 구분 기호로 점을 변경하고 더 많은 날짜 형식에 대해서는 DATE_FORMAT (date, format) 함수를 확인하십시오 .


3

쿼리에서 시간을 Unix 타임 스탬프로 반환하도록 할 수도 있습니다. 그것은 strtotime()PHP 측 에서 전화를 걸고 덜 집중적으로 만들 필요가 없습니다 ...

select  UNIX_TIMESTAMP(timsstamp) as unixtime from the_table where id = 1234;

그런 다음 PHP에서 date()함수를 사용하여 원하는 방식으로 형식을 지정하십시오.

<?php
  echo date('l jS \of F Y h:i:s A', $row->unixtime);
?>

또는

<?php
  echo date('F j, Y, g:i a', $row->unixtime);
?>

MySQLDATE_FORMAT기능 을 사용하는 것과는 달리이 접근법을 좋아 합니다. 데이터를 가져 오기 위해 동일한 쿼리를 재사용하고 PHP에서 형식을 변경할 수 있기 때문입니다.

UI에서 날짜가 표시되는 방식을 변경하기 위해 두 개의 서로 다른 쿼리를 갖는 것은 성가신 일입니다.


UNIX_TIMESTAMP의 필요성을 없애기 위해 사용한다는 아이디어가 마음에 듭니다 strtotime. 이 답변은 실제로 요청한 OP 형식으로 시간을 형식화하는 예를 제공하면 더 좋습니다.
toxalot

1

Unix Timestamp에 반환되지 않은 날짜에 문제가있을 수 있으므로 이것은 나를 위해 작동합니다 ...

return date("F j, Y g:i a", strtotime(substr($datestring, 0, 15)))

1
OP가 요청한 형식으로 날짜를 변환하지 않습니다.
toxalot

1

이것은 작동합니다 ...

echo date('m/d/y H:i (A)',strtotime($data_from_mysql));

1
이 형식은 24 시간을 AM / PM과 혼합합니다. 그렇지 않으면 5 년 이상 전에 게시 된 답변과 동일합니다.
toxalot

0

PHP 버전 4.4.9 및 MySQL 5.0을 사용하면 다음과 같이 작동합니다.

$oDate = strtotime($row['PubDate']);
$sDate = date("m/d/y",$oDate);
echo $sDate

PubDateMySQL 의 열입니다 .


OP가 요청한 형식으로 날짜를 변환하지 않습니다.
toxalot

0

내가 제안하는 접근법은 다음과 같이 작동합니다. 먼저, mysql 형식의 문자열에서 기본 datetime 객체를 만듭니다. 그런 다음 원하는 방식으로 형식을 지정합니다. 운 좋게도 mysql datetime은 ISO8601을 준수하므로 코드 자체가 매우 간단하고 우아하게 보일 수 있습니다. 해당 datetime열에는 시간대 정보가 없으므로 적절하게 변환해야합니다 .

코드는 다음과 같습니다.

(new ISO8601Formatted(
    new FromISO8601('2038-01-19 11:14:07'),
    'm/d/Y h:iA'
))
    ->value();

01/19/2038 11:14AM원하는대로 출력 합니다.

이 예제는 머랭 라이브러리를 사용합니다. 당신 이 공상이라면 더 많은 것을 확인할 수 있습니다 .


-1
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";

1
이것은 OP 질문에 대답하지 않습니다. 영업 이익은 날짜를 가지고 싶어 에서 MySQL의 형식과 변환을 mm / 일 / 년 H : M (AM / PM) . 이것은 반대입니다. 또한 데이터베이스가 아닌 양식에서 입력을받습니다.
톡 사롯
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.