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

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

QA

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

본문

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

1. 엑셀로 처리하는 방법

0afba93d8661ef7e0dff03ff6ef9191e_1476015001_0413.PNG 

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

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

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

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

 

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

ㄱ. reader.php 0x16주석처리

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

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

ㄷ. 변환


$UNIX_DATE = ($in_datetime - 25568.99999) * 86400;
echo gmdate("Y-m-d H:i:s", $UNIX_DATE);

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

고맙습니다. 그림자밟기님..
저야 친구가 고생하고 있어 도움이 될까 하고 구글링 한 것이 전부입니다.
살아서 움직이는 이런 답변이야 말로 귀한 보물입니다.
그렇습니다. 감사합니다. 꾸벅..

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

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

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

 

다시질문내용정리)


엑셀에 들어있는 날짜를 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 형식으로 넣는 것 입니다.

 

 

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

 

 

 52256335955832c0c4f3a3b1905ec13b_1475975812_883.jpg 

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

2c04b54135aadea77a64e04255a60653_1475989122_2833.PNG
 

 

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


<?php
$in_datetime = '2016-12-07  9:20:00 AM';
$in_datetime = '2016-12-07  1:20:00 PM';
$tmp = explode(' ', $in_datetime);
if($tmp[3] == 'AM') $in_datetime = substr(str_replace('  ', ' 0', $in_datetime),0,19);
else if($tmp[3] == 'PM') {
	$plus_h = $tmp[2][0] + 12;
	$in_datetime = substr(str_replace('  '.$tmp[2][0], ' '.$plus_h, $in_datetime),0,19);
}
echo $in_datetime;
?>

감사합니다. 그런데 ^^
엑셀에서 사용자 지정에서 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" 로 지정해봤는데 역시 결과가 같아요)

아. 다시.

reader.php 에서 아래 코드

원본코드


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

 

추측 변경 코드


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

 

또는


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

 

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

답변을 작성하시기 전에 로그인 해주세요.
전체 16,793
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT