테스트 사이트 - 개발 중인 베타 버전입니다

2006-10-11 3:39:17 AM을 2006-10-11 03:39:17 꼴로 변형하려면? 채택완료

프로그래머7 9년 전 조회 4,882

php에서 

 

$datetime = 2006-10-11  3:39:17 AM 을  

 

위의 값을   0000-00-00 00:00:00 꼴로 변형하려면? 

 

이런 포맷이 잘 안찾아지네요

 

 

엑셀에 들어잇는 값은   2006-10-11  3:39:17 AM   인데

그 값을 변수에 넣어보니 실제로 그  변수에 들어있는 값은 '12/10/2006 12:39' 이네요???

완전 다른 날짜와 시간으로???

왜 이런가요? 위에 내용 처럼..포맷 변형을 제대로 시켜야 하나요?

댓글을 작성하려면 로그인이 필요합니다.

답변 7개

채택된 답변
+20 포인트
그림자밟기

1. 엑셀로 처리하는 방법

http://sir.kr/data/editor/1610/0afba93d8661ef7e0dff03ff6ef9191e_1476015001_0413.PNG" title="0afba93d8661ef7e0dff03ff6ef9191e_1476015001_0413.PNG" style="font-size: 14.6667px;"> 

ㄱ. 텍스트 함수로 텍스트로 처리

ㄴ. 해당 값을 값으로 복사하여 붙여 넣기

    => 해당열 선택 Ctrl+C > 우클릭 > 선택하여 붙여넣기 > 값으로 붙여넣기

    => 위 방법으로 하면 해당 날짜들이 텍스트로 붙여 넣어집니다.

 

2. PHP 파일로 처리 하는 방법

ㄱ. reader.php 0x16주석처리

</span> </p><p>    var $dateFormats = array (</p><p>        0xe => "d/m/Y",</p><p>        0xf => "d-M-Y",</p><p>        0x10 => "d-M",</p><p>        0x11 => "M-Y",</p><p>        0x12 => "h:i a",</p><p>        0x13 => "h:i:s a",</p><p>        0x14 => "H:i",</p><p>        0x15 => "H:i:s",</p><p>        //0x16 => "d/m/Y H:i",</p><p>        0x2d => "i:s",</p><p>        0x2e => "H:i:s",</p><p>        0x2f => "i:s.S");</p><div><span style="font-size: 11pt;">

ㄴ. 위 방법으로 하면 42639.6464699 이런식

ㄷ. 변환

</p><p>$UNIX_DATE = ($in_datetime - 25568.99999) * 86400;</p><p>echo gmdate("Y-m-d H:i:s", $UNIX_DATE);</p><div><span style="font-size: 11pt;">

테스트 해보니 위 처럼 하니 초까지는 정확히 나왔습니다. 1초 정도 차이가 있을 수도 있겠네요.

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

프로그래머7
9년 전
우와 그림자 밟기님 대단하시네요^^ 정말 감사합니다^^
s
solsu1
9년 전
고맙습니다. 그림자밟기님..
저야 친구가 고생하고 있어 도움이 될까 하고 구글링 한 것이 전부입니다.
살아서 움직이는 이런 답변이야 말로 귀한 보물입니다.
그렇습니다. 감사합니다. 꾸벅..

댓글을 작성하려면 로그인이 필요합니다.

그림자밟기

아. 다시.

reader.php 에서 아래 코드

원본코드

</p><p>    var $dateFormats = array (</p><p>        0xe => "d/m/Y",</p><p>        0xf => "d-M-Y",</p><p>        0x10 => "d-M",</p><p>        0x11 => "M-Y",</p><p>        0x12 => "h:i a",</p><p>        0x13 => "h:i:s a",</p><p>        0x14 => "H:i",</p><p>        0x15 => "H:i:s",</p><p>        0x16 => "d/m/Y H:i",</p><p>        0x2d => "i:s",</p><p>        0x2e => "H:i:s",</p><p>        0x2f => "i:s.S");</p><p>

 

추측 변경 코드

</p><p>    var $dateFormats = array (</p><p>        0xe => "Y/m/d",</p><p>        0xf => "Y-M-d",</p><p>        0x10 => "M-d",</p><p>        0x11 => "Y-M",</p><p>        0x12 => "h:i a",</p><p>        0x13 => "h:i:s a",</p><p>        0x14 => "H:i",</p><p>        0x15 => "H:i:s",</p><p>        0x16 => "Y/m/d H:i",</p><p>        0x2d => "i:s",</p><p>        0x2e => "H:i:s",</p><p>        0x2f => "i:s.S");</p><p>

 

또는

</p><p>        0x16 => "Y/m/d H:i:s",</p><p>

 

통밥으로 찍어봤습니다. 테스트해보시고 결과좀..ㅎㅎ

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

프로그래머7
9년 전
댓글로 수정해서 내용 정리해드렸어요

댓글을 작성하려면 로그인이 필요합니다.

그림자밟기

1. 엑셀에서 처리 : 표시형식을 변경해본다. (hh)


 

 

2. 위 방법으로도 안되면 그냥 아래 처럼 무식하게 처리한다.

</p><p><?php</p><p>$in_datetime = '2016-12-07  9:20:00 AM';</p><p>$in_datetime = '2016-12-07  1:20:00 PM';</p><p>$tmp = explode(' ', $in_datetime);</p><p>if($tmp[3] == 'AM') $in_datetime = substr(str_replace('  ', ' 0', $in_datetime),0,19);</p><p>else if($tmp[3] == 'PM') {</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$plus_h = $tmp[2][0] + 12;</p><p><span class="Apple-tab-span" style="white-space:pre">	</span>$in_datetime = substr(str_replace('  '.$tmp[2][0], ' '.$plus_h, $in_datetime),0,19);</p><p>}</p><p>echo $in_datetime;</p><p>?></p><p>

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

프로그래머7
9년 전
감사합니다. 그런데 ^^
엑셀에서 사용자 지정에서 yyyy-mm-dd hh:mm:ss라고 지정하니까 지정이 되긴하는데요
실제 그 엑셀의 셀을 클릭해서 값을 보면 yyyy-mm-dd hh:mm:ss AM 이렇게 값이 있어요
그리고 이상태에서 DB에 넣어보니 역시 날짜기 이상하게 나와요

그리고 아래에서 reader.php에서 알려주신 부분 수정해보고 실행해봐도 날짜기 이상하게 나옵니다.

0x16 => "Y/m/d H:i:s" 으로 바꿨어요
item 엑셀 등록 하는 파일 itemcxcelupdate.php파일 처럼 해봤는데요

$mb_datetime = addslashes($data->sheets[0]['cells'][$i][$j++]);
에서 $mb_datetime 값이 39001.1522788194 가 들어가더군요

그래서 엑셀에서 해당 셀을 텍스트로 바꿔보니... 그 번호와 똑같아요

다시 말해서 아래 식에서 $mb_datetime에 값이 들어가는데
$mb_datetime = addslashes($data->sheets[0]['cells'][$i][$j++]);

엑셀에는 분명 2006-10-11 5:03:54 AM 값이 들어있는데

그 것을 읽어들일때 그셀의 텍스트 값을 읽어들이고 있어요

따라서 그림자님이 알려주신 것 처럼 AM, PM 일 경우 구분해서
잘라오기를 해올수가 없어요



(0x16 => "Y-m-d H:i:s" 로 지정해봤는데 역시 결과가 같아요)

댓글을 작성하려면 로그인이 필요합니다.

P
9년 전

다시질문내용정리)

엑셀에 들어있는 날짜를 db에 넣기 하고 있는데요

 

제가 원하는 것은 엑셀에 들어있는 값을(2006-10-11 3:39  또는 2006-10-11  3:39:17 AM이던지 어쨌든..)

DB 에 2006-10-11 03:39:ss 형식으로 넣는 것 입니다.

 

 

1차현상) 엑셀에 들어있는 값이 그냥 보기에는 2006-10-11 3:39 으로 보이는 데 

그 셀을 마우스로 클릭시 엑셀 상단에 보이는 실제(아래 그림 참조) 값은 

2006-10-11  3:39:17 AM 형식으로 보여요

 

 

2차현상) 그래서 엑셀에 들어잇는 실제 값은   2006-10-11  3:39:17 AM   인데

그 값을 아래처럼  변수에 넣어보니 

$wr_datetime  = addslashes($data->sheets[0]['cells'][$i][$j++]); 

여기에서  $wr_datetime 에 들어있는 값은 12/10/2006 12:39 으로 전혀 엉뚱한 값이 들어가네요?? 

3차현상) 그 변수를 아래와 같이 다시 변환해본 결과         

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

여기에서 $wr_datetime 에 들어있는 값은   1970-01-01 09:00:12  입니다  

 

또 다시 이렇게 전혀 다른 날짜가 나오는데???  

이거 원인과 해결법좀 알려주시면 감사하겠습니다

 

제가 원하는 것은 엑셀에 들어있는 값을(2006-10-11 3:39  또는 2006-10-11  3:39:17 AM이던지 어쨌든..)

DB 에 2006-10-11 03:39:ss 형식으로 넣는 것 입니다.

 

 

답변 주시는 모든 분께 하시는일 잘 되십시오^^

 

 

  

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

9년 전

엑셀로 받을 때에 해당 셀을 문자형으로 바꿔 보세요. 

http://www.baragi.net/bbs/board.php?bo_table=dev&wr_id=8612">http://www.baragi.net/bbs/board.php?bo_table=dev&wr_id=8612 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

프로그래머7
9년 전
다시 질문내용을 정리했어요... 정리한 내용도 봐주시면 감사하겠습니다^^
프로그래머7
9년 전
마스터님 ^^
제 경우는 엑셀에 들어있는 날짜를 db에 넣기 하고 있어서요
그 경우와 약간 다른거 같은데... 어떻게 해야 할까요?..

댓글을 작성하려면 로그인이 필요합니다.

P
9년 전
하단부에 다시 질문정리했어요^^
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

config.php 파일 보시면 시간 날짜관련 정보가 있으니 참고하시면 활용가능하실거에요

로그인 후 평가할 수 있습니다

답변에 대한 댓글 3개

프로그래머7
9년 전
하단부에 다시 질문 정리했어요^^
프로그래머7
9년 전
하단부에 다시 질문내용 정리했어요
프로그래머7
9년 전
아래에 다시 질문 내용 정리했어요^^ 좀 봐주세요^^

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인