20200130_100121.jpg

 

{getTimeGap($document->get('last_update'), "m.d")}

를 이용하여 m.d를 사용 + Lang.xml 을 통해 24시간 내에 등록된 댓글과 글에 관해서는

~시간전, ~분전, 몇 초전 등의 표시를 할 수 있게 되었습니다

 

그러나 24시간이 지난 후에는 m달/d일 이렇게 표시가 됩니다ㅜㅜ

이것을 ~일전, ~달전 등으로 바꾸기 위해서는 타임테이블 함수가 필요한 것으로 알고 있습니다.

86400=1일 이라는것도 이곳을 통해 배웠습니다.

게시판상에 나타내려면 list 나 read 노말에서 바꾸어야 한다는것도 배웠습니다

 

그런데 이 타임테이블 함수를 대체 어디에 어떻게 추가해야 하는지 모르겠습니다ㅜㅜ

 

펑션 time ago에 관한 것도 서치를 통해 얻었지만, 이것을 어디에 어떻게 추가해서 나타내야 할까요?

또 제가 알아본 아래 함수가 맞는걸까요?

 

function time_ago($stamp,$granularity=1)
    {
        if($stamp)
        {
            zdate($stamp,'d M Y H:i:s');
        }
        else
        {
            $stamp = $this->getRegdate('d M Y H:i:s');
        }

        $date = strtotime($stamp);

        $difference = time() - $date;

        $periods = array('년' => 31536000,
            '개월' => 2628000,
            '주' => 604800, 
            '일' => 86400,
            '시간' => 3600,
            '분' => 60,
            '초' => 1);

        foreach ($periods as $key => $value)
        {
            if ($difference >= $value)
            {
                $time = floor($difference/$value);
                $difference %= $value;
                $retval .= ($retval ? ' ' : '').$time;
                $retval .= (($time > 1) ? $key : $key);
                $granularity--;
            }
            if ($granularity == '0') break;
        }

        if(!$retval) $retval = '방금';

        return $retval.' 전';
    }

zdate($oDocument->get('regdate'), 'relative' 를 통해 하려고 해보니 제가 원하는 ~일전, ~초전, ~분전과 같은 일은 안되더군요ㅠㅠ

 

xe보드에서 리스트 출력할때 1일전, 2일전, 1달전 이런 식으로 구현을 하려면 어떻게 해야 할까요?

도움 부탁드립니다ㅜㅜ

  • profile

    time_ago(strtotime($oDocument->get('regdate)));
    해보세요

  • profile ?

    안녕하세요 답변 감사드립니다ㅜㅜ말씀하신대로 넣어보았습니다만 
    {time_ago(strtotime($oDocument->get('regdate)));}
    time_ago(strtotime($oDocument->get('regdate)));
    둘다 에러가 뜹니다ㅜㅜ strtotime 이라는 것을 따로 지정을 해주어야 하는걸까요???

    아니면 제가 잘못 넣은것인지ㅠㅠ죄송합니다ㅠㅠ

    dd.jpg

     

    본문에 있는 함수는 제가 어디에 적용시키는지 몰라서 못넣은 상태입니다 그래서 그런걸까요?

  • ? profile
    {time_ago(strtotime($oDocument->get('regdate)));} 에 마지막 ; 세미클론 빼세요.
  • profile ?
    ; 빼고 했는데도 마찬가지로 똑같은 에러가 나옵니다ㅠㅠ
    혹시나 해서 'regdate 로도 해보고 'regdate' 로도 해봤는데 안되네요ㅠㅠ
    도와주셔서 너무나 감사드립니다 그런데 계속같은 에러가 떠요ㅠㅠ 제가 time ago 라는 것을 어딘가에 추가해야 하는걸까요?
  • ? profile

    어디에 어떻게 입력하셨나요?

    해당 목록을 띄우는 html 파일이 맞나요?
    해당 파일은 어디 디렉토리인가요?

    {time_ago(strtotime($document->get('regdate')))}

    으로 입력하면 잘 나오나요?

    오류가 뜬다고 하셧는데 에러메세지나 증상은 어떻게 보이나요? 스샷있나요?

     

    저 이미지를 보이는 곳은 어디 페이지인가요? 페이지주소

  • profile ?

    dd.jpg

     

    람보님 댓글 감사합니다
    제가 위에 스샷 첨부한대로
    람보님께서 가르쳐주신 어떤 수식을 입력하든 등록일 밑으로 
    {time_ago(strtotime($document->get('regdate')))}
    <-이 문자들이 문자 그대로 뜹니다 ;_; 
    list_normal 에서 수정하고 있습니다
    'regdate'를 하든 'regdate 를 쓰든 마찬가지입니다

    이 이미지 파일에서 ;를 제외하고 써도 마찬가지더라구요ㅜㅜ

     

                <td class="time" cond="$val->type=='regdate'">{getTimeGap($document->get('regdate'), "m.d")}</td>
    에서 {getTimeGap($document->get('regdate'), "m.d")}를 말씀하신 것으로 수정하였으나 되지 않았습니다

  • ? profile
    어느파일수정하셨어요?
  • profile

    게시글 목록에서는 $document->get('regdate') 를 써야 할 겁니다.

  • profile ?
    웹지기님 람보님
    제가 코딩을 3,4일간 이 사이트에서 검색해가며 해본지라 미숙한 질문 드리는 점 죄송합니다
    {time_ago(strtotime($Document->get('regdate)))}
    로 넣어보았으나 같은 에러가 떴습니다...
    아니면 그냥
    $document->get('regdate')
    을 넣어야 하나요?
    답변 감사합니다
  • ? profile
    time_ago 부분은 저는 잘 모르는데 일단 목록에서 해당 게시글의 작성일자를 구하려면 $document 를 써야 할 것입니다. 스킨의 다른 부분에 작성된 작성일자 코드를 살펴보세요.
  • profile ?
    저는 time_ago를 통해 1일전, 2일전, 1달전을 구현하려고 합니다
    현재 목록에서도 oDocument를 통해 작성일자는 구해집니다

    아시는 분이 계시다면 도움 부탁드립니다 ;_;
  • profile
    날짜 출력할 곳보다 위쪽에

    {@
    $x_date = strtotime($document->getRegdate(YmdHi));
    $time_calc = time() - $x_date;
    }

    <!--@if($time_calc < 60)-->{@ $_atc_date = '방금'}
    <!--@elseif($time_calc >=60 && $time_calc < 3600)-->{@ $_atc_date = floor($time_calc/60).'분 전'}
    <!--@elseif($time_calc>=3600 && $time_calc < 86400)-->{@ $_atc_date = floor($time_calc/3600).'시간 전'}
    <!--@elseif($time_calc>=86400)-->{@ $_atc_date = floor($time_calc/86400).'일 전'}
    <!--@end-->

    시간경과에 따른 출력 형태를 선언해 놓구요.

    실제 작성일자 출력 부분에
    {$_atc_date}
    로 하시면 될 것 같네요. 제 스킨에 적힌 코드를 참조했습니다.
  • profile ?

    AAAAAAAA.jpg

     

    정말 감사합니다!!! 지금 적용시켜봤는데
    이틀전에 올린 글은 2 (깨짐), 하루전에 올린 것은 1 (깨짐) 이렇게 되는것으로 보아
    성공적으로 적용된거 같습니다!! 이 깨진 글자만 어떻게 하면 될 것 같아서

     

    '방금' 이나 '분 전'을 제 lang에 등록된대로 {$lang->min} 이나 {$lang->mins}로 바꾸었는데 역시 깨지네요

    이 점에 관해서는 혹시 어떻게 수정해야 할지 도움을 구할 수 있을까요

    계속 귀찮게 해드려 죄송합니다ㅠ_ㅠ

  • ? profile

    에디터를 어떤 것을 썼는지 모르겠지만 저장할때 UTF-8 로 인코딩 되어 저장되도록 하여야 합니다.
    더 좋은 옵션은 BOM 없음 까지 적용하는 것입니다. 인코딩이 맞지 않아 생기는 문제입니다.

    $lang  에서 불러온 값이 아니라 그것과는 전혀 관련 없습니다.

     

  • profile ?
    방금 파일을 메모장에서 열어 UTF-8로 저장해서 업로드 했더니 1일전 떴어요!!!!!
    정말 감사합니다ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
    만약 여기다가 달 전을 추가하고 싶으면
    <!--@elseif($time_calc>=86400)-->{@ $_atc_date = floor($time_calc/86400).'일 전'}
    에서 86400 X 30을 한 값을 넣고 달 전을 넣으면 되겠지요?
    아무리 해도 안될 것 같았는데 너무너무 감사합니다!!!!!
  • ? profile
    이전 조건 수식에 && 로 두가지 조건에 만족하도록 하셔야 합니다. 맨마지막 조건은 저 값보다 크면 무조건 일 수로 계산하도록 되어있는 것이니 이전 조건을 두가지 만족으로 다시 고치셔야 하고,

    마지막 추가하는 조건은 지금 마지막 처럼 단일 조건으로 하시면 됩니다.

    그리고 윈도우의 기본 메모장이라면 그거 쓰지 마시고 코딩을 제대로 할 수 있는 편집 전용 에디터를 사용하시기 랍니다. ex) 노트++
  • profile ?

    무슨 말씀이신지 어렵습니다만 ELSEIF에 관해서 열심히 찾아보겠습니다
    혹시 하나 더 여쭈어도 괜찮으시다면, 제가 등록일 옆에 '최종수정일' 이라는 메뉴를 하나 더 덧붙였습니다.
    last_update 메뉴인데요

    제가 1분전에 글을 등록하면
    최종수정일, 등록일 모두 1분전으로 뜹니다
    글을 수정하거나 댓글을 달 경우 등록일은 그대로 1분전 / 최종수정일은 '방금' 으로 표시되기 위해서는
    {$_atc_date}를 어떻게 꾸며줘야 할까요?

    {$_atc_date(getTimeGap($document->get('last_update'), "m.d"))}로 넣으면 될까요?

  • ? profile
    $_atc_date 는 변수입니다. 함수가 아니구요.
    수정일 표시는 새로 만드셔야 합니다.
  • profile ?

    염치없게 굴어 정말 죄송합니다
    혹시 불쾌하지 않으시다면 도움 받을 수 있을까요?

    '새로 만들어야 한다' 는 개념이 무엇일까 생각하다

    {@
    $x_date = strtotime($document->getRegdate(YmdHi));
    $time_calc = time() - $x_date;
    }

    <!--@if($time_calc < 60)-->{@ $_atc_date = '몇 초 전'}
    <!--@elseif($time_calc >=60 && $time_calc < 3600)-->{@ $_atc_date = floor($time_calc/60).'분 전'}
    <!--@elseif($time_calc>=3600 && $time_calc < 86400)-->{@ $_atc_date = floor($time_calc/3600).'시간 전'}
    <!--@elseif($time_calc>=86400)-->{@ $_atc_date = floor($time_calc/86400).'일 전'}
    <!--@end-->

    에 $x_date = strtotime($document->getLast_Update(YmdHi)); 라는것을 밑줄에 추가했다가
    사이트 전체가 먹통이 되어서 백업으로 되돌렸습니다

    그 밑에 아예 {@ 로 시작해 <!--@end--> 로 끝나는 테이블을 하나 더 추가하여 getLastUpdate로 해보았으나 마찬가지였습니다
    아니면 '새로 만들어야 한다'는 개념은 어느 태그를 서치하다보면 배울 수 있을까요? ;_;
    모쪼록 질문이 불쾌하지 않으셨으면 좋겠습니다ㅜㅜ

  • ? profile
    제가 만들어드린 세트를 한세트 더 만들어야 한다는 겁니다.
    $document->getRegdate(YmdHi) 이게 등록일 입니다.

    수정일을 똑같이 한세트 더 만들어서 사용해야 한다는 것입니다.
  • profile ?
    웹지기님 2시간 동안 혼자서 해봤는데
    말씀하신대로 세트를 '한세트 더' 만들어서 해보았습니다
    수정일의 경우 getUpdate 로 하면 되더라구요 근데 문제는

    {@
    $x_date = strtotime($document->getUpdate (YmdHi));

    (밑은 길어서 생략했습니다)
    이렇게 한 세트를 더 만들 경우, Update와 Regdate가 똑같이 나오더라구요
    예를 들어 등록은 1시간전에 하고 업데이트는 1초전에 했는데
    한 채 더 만들어서 붙일 경우 똑같이 등록시간 1시간전/업데이트1시간전으로 출력이 되었습니다
    긴 시간 끈기있게 인내심있게 가르쳐주셔서 감사합니다
  • ? profile

    변수도 다 바꾸셔야죠. 업데이트 시간을 담을 변수로 새로 할당하고 전부 새롭게 한세트를 다시 만드셔야 합니다.

    $x_date  <-- 이건 이미 썼으니 다른 것으로 바꾸셔야 하고 밑에 사용한 변수도 다 바꿔야 합니다.

  • profile ?
    웹지기님 말씀하신대로 $x_date를 y_date로 바꾸고
    time_calc -> time_calcc
    @ $_atc_date ->@ $_atcc_date

    이런식으로 전부 다 바꾸었습니다
    하나바꾸고 업로드 / 하나바꾸고 업로드 이런 식으로 계속하다보니
    그랬더니 ~일전, ~분전, 몇초전이 구현되었습니다!!!
    그리고 업데이트와 등록일이 확실하게 구분되었어요!!

    한가지 에러는 150분 전 1796분 전 이런 식으로 뜹니다

    혹시 숫자도 바꾸어야 하나요? 숫자를
    60 -> 59
    3600 -> 3481
    86400 -> 83544
    이런식으로 바꿔서도 해보았습니다만 150분전이 148분전 으로 바뀌는등의 차이만 있네요
  • ? profile
    변수명이나 어딘가 오타가 있으시겠죠. 계산이야 변수들 입력값에 의한 결과값이니까요.
  • profile ?
    아침부터 지금까지 너무나 감사합니다
    오류가 있는지 계속 살펴보겠습니다!!