[태그:] 문자열 제어

  • PHP로 게시판 등록일자 표시: 방금전, 몇 시간 전, 몇 일 전 자동 계산하기

    웹사이트의 게시판이나 블로그에서 등록일자를 사용자에게 직관적으로 표시하는 것은 매우 중요합니다.

    본 포스팅에서는 PHP를 이용해 게시물의 등록일자를 ‘방금전’, ‘몇 시간 전’, ‘며칠 전’ 등의 상대적인 시간 형식으로 표시하는 방법을 설명합니다.

    이를 통해 사용자 경험을 개선하고, 게시물의 최신성을 쉽게 파악할 수 있게 됩니다.

    목차

    1. 함수 소개
    2. 코드 예제
    3. CSS 스타일 적용
    4. 적용 예시
    5. 결론

    1. 함수 소개

    게시물의 등록일자를 상대적인 시간으로 표시하기 위해 다음의 두 가지 함수를 사용합니다.

    • getRelativeDate: 주어진 날짜와 현재 날짜의 차이에 따라 상대적인 날짜를 반환합니다.
    • getRelativeTime: 주어진 시간과 현재 시간의 차이에 따라 상대적인 시간을 반환합니다.

    이 함수들은 주어진 날짜나 시간과 현재 시간의 차이를 계산하여 “방금전”, “X분전”, “X시간전”, “어제”, “X일전” 등의 형식으로 직관적으로 표시합니다.

    2. 코드 예제

    아래는 PHP에서 상대적인 날짜와 시간을 계산하여 표시하는 코드입니다.

    아래의 코드를 print_date.lib.php에 만들어보겠습니다.

    <?php
    // print_date.lib.php
    
    /**
     * 주어진 날짜와 현재 날짜의 차이에 따라 상대적인 날짜를 반환하는 함수
     *
     * @param string $datetime - 비교할 날짜 시간 문자열
     * @return string - 상대적인 날짜를 나타내는 문자열
     */
    function getRelativeDate($datetime) {
        $now = time();
        $dateTimestamp = strtotime($datetime);
    
        if (!$dateTimestamp) {
            return " ";
        }
    
        // 날짜 차이를 초 단위로 계산
        $diffInSeconds = $now - $dateTimestamp;
        $daysAgo = floor($diffInSeconds / 86400);
    
        // 날짜 차이에 따른 문자열 생성
        if ($daysAgo < 1) {
            return getRelativeTime($datetime);
        } elseif ($daysAgo == 1) {
            return '<span class="time-day">어제</span>';
        } elseif ($daysAgo < 7) {
            return '<span class="time-day">' . $daysAgo . '일전</span>';
        } elseif (date('Y', $dateTimestamp) == date('Y')) {
            // 7일 이상, 같은 해 내의 경우 MM-DD 형식으로 반환
            return '<span class="time-date">' . date('m-d', $dateTimestamp) . '</span>';
        } else {
            // 다른 해의 경우 YYYY-MM-DD 형식으로 반환
            return '<span class="time-date">' . date('Y-m-d', $dateTimestamp) . '</span>';
        }
    }
    
    /**
     * 주어진 시간과 현재 시간의 차이에 따라 상대적인 시간을 반환하는 함수
     *
     * @param string $time - 비교할 시간 문자열
     * @return string - 상대적인 시간을 나타내는 문자열
     */
    function getRelativeTime($time){
        $now = time();
        $dateTimestamp = strtotime($time);
    
        $diffInSeconds = $now - $dateTimestamp;
        $hours = floor(abs($diffInSeconds / 3600));
        $minutes = floor(abs($diffInSeconds % 3600) / 60);
        $seconds = floor(abs($diffInSeconds % 60));
    
        if ($hours > 0) {
            return '<span class="time-hour">' . $hours . '시간전</span>';
        }
    
        if ($minutes > 0) {
            return '<span class="time-minute">' . $minutes . '분전</span>';
        }
    
        return '<span class="time-recent">방금전</span>';
    }
    ?>

    위 코드를 통해 getRelativeDate 함수는 입력된 날짜와 현재 날짜의 차이에 따라 “어제” 또는 “X일전”을 반환합니다.

    getRelativeTime 함수는 시간 차이에 따라 “방금전”, “X분전”, “X시간전”을 반환합니다.

    3. CSS 스타일 적용

    상대적인 날짜와 시간 텍스트를 시각적으로 매력적이게 표시하기 위해 CSS 스타일을 추가해보겠습니다.

    다음은 스타일을 정의하는 styles.css 파일의 예제입니다.

    /* styles.css */
    
    /* 시간 표시 스타일 */
    .time-hour {
        color: #4f95b7;
        font-weight: bold;
    }
    
    .time-minute {
        color: #ff8521;
        font-weight: bold;
    }
    
    .time-recent {
        color: #ee3616;
        font-weight: bold;
    }
    
    .time-day {
        color: #333;
    }
    
    .time-date {
        color: #666;
    }

    이 CSS 클래스들은 상대적인 날짜와 시간 텍스트의 색상과 굵기를 설정하여 강조할 부분을 명확하게 표시합니다.

    4. 적용 예시

    PHP와 CSS 파일을 통합하여 등록일자를 표시하는 예제 파일인 index.html을 만들어보겠습니다.

    <!DOCTYPE html>
    <html lang="ko">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>PHP 상대 시간 계산 및 게시판 등록일자 표시</title>
        <link rel="stylesheet" href="styles.css">
    </head>
    <body>
        <?php include 'print_date.lib.php'; ?>
    
        <h1>PHP 상대 시간 계산 및 게시판 등록일자 표시</h1>
        <p>현재 날짜로부터 몇 일 전인지: <?php echo getRelativeDate('2024-06-12 14:30:00'); ?></p>
        <p>몇 시간 전인지: <?php echo getRelativeTime('2024-06-18 10:00:00'); ?></p>
    </body>
    </html>

    수행을 하면 서버 시간을 기준으로 몇 일전인지 몇 시간 전인지 출력을 하게 됩니다.

    5. 결론

    이 글에서는 PHP를 사용하여 게시판의 등록일자를 ‘방금전’, ‘몇 시간 전’, ‘며칠 전’ 등으로 표시하는 방법을 다루었습니다.

    이 방법은 사용자에게 등록일자의 최신성을 직관적으로 전달하며, 게시물의 가독성을 높여줍니다.

    제공된 예제 코드를 통해 쉽게 자신의 프로젝트에 통합하고, CSS를 통해 스타일을 조정하여 사용자 경험을 향상시킬 수 있습니다.

    이 예제와 설명이 여러분의 프로젝트에서 상대적인 날짜 및 시간을 표시하는 데 도움이 되길 바랍니다.

  • PHP에서 str_replace를 사용하여 여러 문자를 한 번에 대체하는 방법

    PHP에서 문자열을 처리할 때 str_replace 함수를 사용하여 특정 문자를 대체하는 경우가 많습니다. 특히, 여러 문자를 한 번에 대체하거나 제거하는 작업이 필요할 때가 있습니다. 이번 글에서는 str_replace를 사용하여 여러 문자를 한 번에 대체하는 방법을 예제 코드와 함께 알아보겠습니다.

    PHP str_replace 함수 소개

    str_replace 함수는 문자열에서 특정 문자를 다른 문자로 대체할 때 사용되는 PHP의 내장 함수입니다. 기본적인 사용법은 다음과 같습니다.

    <?php
    $originalString = "Hello, World!";
    $search = "World";
    $replace = "PHP";
    $newString = str_replace($search, $replace, $originalString);
    
    echo $newString;  // 출력: Hello, PHP!
    ?>

    여러 문자를 한 번에 대체하는 방법

    여러 문자를 한 번에 대체하거나 제거하기위해 str_replace 함수에 배열을 전달할 수 있습니다. 이를 통해 여러 문자를 한 번에 처리할 수 있습니다.

    아래는 여러 문자를 한 번에 제거하는 예제입니다.

    <?php
    $str = "값어치를 생각하며 「돈의 중요성」에 대해 알아보기!";
    echo "원본 문자열: " . $str . "\r\n";  // 출력: 값어치를 생각하며 「돈의 중요성」에 대해 알아보기!
    
    // 여러 문자를 한 번에 제거
    $charactersToRemove = array("!", "", "");
    $str = str_replace($charactersToRemove, "", $str);
    
    echo "처리된 문자열: " . $str . "\r\n";  // 출력: 값어치를 생각하며 돈의 중요성에 대해 알아보기
    ?>

    위 코드에서는 “값어치를 생각하며 「돈의 중요성」에 대해 알아보기!”라는 문자열에서 !, 「, 」를 제거하고 있습니다. str_replace 함수에 배열을 전달하여 여러 문자를 한 번에 제거할 수 있습니다.

    상세 설명

    1. 원본 문자열 설정:
    $str = "값어치를 생각하며 「돈의 중요성」에 대해 알아보기!";
    echo "원본 문자열: " . $str . "\r\n";
    • 여기서는 대체할 문자를 포함한 원본 문자열을 정의하고 출력합니다.
    1. 제거할 문자 배열 설정:
    $charactersToRemove = array("!", "", "");
    • 여러 문자를 배열로 정의합니다. 이 배열의 각 문자가 문자열에서 제거될 것입니다.
    1. str_replace를 사용한 대체:
    $str = str_replace($charactersToRemove, "", $str);
    echo "처리된 문자열: " . $str . "\r\n";
    • str_replace 함수에 제거할 문자 배열과 빈 문자열을 전달하여 원본 문자열에서 해당 문자를 모두 제거합니다. 처리된 문자열을 출력합니다.

    결론

    PHP에서 str_replace 함수를 사용하여 여러 문자를 한 번에 대체하거나 제거하는 것은 매우 유용한 방법입니다. 배열을 활용하여 간단하고 직관적으로 여러 문자를 처리할 수 있습니다. 이 방법을 사용하면 코드의 가독성을 높이고 불필요한 함수 호출을 줄일 수 있습니다.

    위 예제 코드를 참고하여 여러분의 프로젝트에서도 쉽게 적용해보세요!

  • 랜덤 문단/단어 추출 – 통합편

    여러 글을 작성해야할 때 여러 문단과 단어를 작성해두고 랜덤으로 문단과 단어를 추출해 글을 자동으로 작성해주는 기능을 Javascript로 만들어보겠습니다.

    최근에 올렸던 랜덤 문단 추출 기능랜덤 단어 추출 기능을 합쳐볼 예정입니다.

    랜덤 단어 양식

    랜덤으로 “사과”, “배”, “바나나” 중 하나를 추출하는 것을 가정해보겠습니다.

    일반 문장에서 자주 사용되지 않을 문자인 파이퍼(|)로 구분을 지어보겠습니다.

    이것은 사과|배|바나나입니다.

    어느 영역이 랜덤 단어가 모여있는지 구별하기 위해 대괄호([ ~]})로 감싸보겠습니다.

    이것은 [사과|배|바나나]입니다.

    이 문장을 변환하면 대괄호 안에 있는 ‘사과’, ‘배’, ‘바나나’ 중 하나가 선택되어 아래와 같이 출력 된 답니다.

    이것은 배입니다.

    랜덤 문단 양식

    이번엔 여러 줄의 글을 작성하고 그 중 하나의 줄만 추출하는 것을 해보겠습니다.

    각 줄은 엔터로 구분이 되고 처음과 끝을 나타내는 구역을 ‘[[‘와 ‘]]’로 묶는 방식을 이용해보겠습니다.

    [[
    첫 번째 문단입니다.
    두 번째 문단입니다.
    세 번째 문단입니다.
    ]]

    위와 같이 입력하고 변환을 하면 세 개의 문단 중 임의 줄 하나가 선택되어 출력됩니다.

    세 번째 문단입니다.

    랜덤 문단/단어 양식

    이번에는 위의 두 가지 방법을 모두 사용해보겠습니다.

    아래와 같이 예제 문장을 만들어봤습니다.

    [[
    이것은 [사과|배|바나나]입니다.
    저것은 [사과|배|바나나]입니다.
    [이것|저것]은 [사과|배|바나나|과자][이다.|입니다.|네요.]
    ]]

    위와 같이 입력하고 변환을 하면 아래와 같이 임의의 문단과 단어가 선택되어 출력됩니다.

    저것은 바나나입니다.

    랜덤 문단/단어 사용해보기

    사용된 코드는 아래와 같습니다.

    <script>
    function extractRandomString() {
      const inputString = document.getElementById('inputString').value;
      const delimiter = '|'; // 구분자
      const extractPattern = /\[(.*?)\]/g; // 추출할 구역 패턴, 글로벌 플래그 추가
    
      if (inputString === '') {
        alert('텍스트를 입력하세요.');
        return;
      }
    
      // replace 함수 내에서 랜덤 선택 로직을 적용
      const resultString = inputString.replace(extractPattern, (match, group1) => {
        const choices = group1.split(delimiter);
        const randomChoice = choices[Math.floor(Math.random() * choices.length)];
        return randomChoice;
      });
    
      document.getElementById('result').textContent = RandomSentence (resultString); // 결과를 화면에 출력
    }
    
    function RandomSentence(str) {
      const regex = /\[\[([\s\S]*?)\]\]/g;
      let sentences = [];
      let match;
    
      while (match = regex.exec(str)) {
        sentences = match[1].split(/\r?\n/).filter(Boolean);
        const randomIndex = Math.floor(Math.random() * sentences.length);
        const selectedSentence = sentences[randomIndex].trim();
        str = str.replace(match[0], selectedSentence);
        regex.lastIndex -= match[0].length - selectedSentence.length;
      }
    
      return str;
    }  
    </script>
  • 랜덤 문단 뽑기

    이전 포스팅에서는 Javascript를 통해 특정 영역안에 단어를 임의로 추출하는 기능을 만들어봤는데요.

    이번에는 특정 영역안에 문단글을 넣어놓고 임의로 추출하는 기능을 만들어볼게요.

    랜덤 문단 추출 함수

    function RandomSentence(str) {
      const regex = /\[\[([\s\S]*?)\]\]/g;
      let sentences = [];
      let match;
    
      while (match = regex.exec(str)) {
        sentences = match[1].split(/\r?\n/).filter(Boolean);
        const randomIndex = Math.floor(Math.random() * sentences.length);
        const selectedSentence = sentences[randomIndex].trim();
        str = str.replace(match[0], selectedSentence);
        regex.lastIndex -= match[0].length - selectedSentence.length;
      }
    
      return str;
    }  

    1. 정규 표현식 활용: [[…]]로 둘러싸인 부분을 찾기 위해 정규 표현식을 사용합니다. 이는 대괄호 안에 포함된 모든 내용을 찾아낼 수 있게 해 줍니다.

    2. 문장 분리 및 선택: 찾아낸 텍스트에서 각 줄을 분리한 후, 비어 있지 않은 줄만을 골라내어 배열에 저장합니다. 이 배열에서 무작위로 한 문장을 선택합니다.

    3. 텍스트 교체: 원래 문자열에서 [[…]] 부분을 무작위로 선택된 문장으로 대체합니다.

    4. 인덱스 조정: 문자열 내에서 다음 매칭을 위해 현재 위치를 조정합니다. 이는 선택된 문장 길이에 따라 동적으로 변경됩니다.

    랜덤 문단 추출기능


    랜덤 단어 뽑기 글 보러가기

  • 랜덤 단어 뽑기

    텍스트에서 특정 구분자를 기준으로 랜덤한 단어를 추출하는 Javascript 코드를 만들어봤습니다.

    예를 들어, “이것은 [사과|바나나|포도] 입니다.”라는 문자열을 입력하면 [ ~ ] 사이에 있는 “사과”, “바나나”, “포도” 중 하나의 과일 이름이 랜덤하게 선택되어 출력되는 기능입니다.

    우선 문자열을 입력할 textarea를 만들어보겠습니다.

    <textarea id="inputString" placeholder="이것은 [문자1|문자2|문자3] 입니다."></textarea>

    그리고 텍스트에서 랜덤 문자열을 추출하는 스크립트를 만들어보겠습니다.

    <script>
    function extractRandomString() {
      const inputString = document.getElementById('inputString').value;
      const delimiter = '|'; // 구분자
      const extractPattern = /\[(.*?)\]/g; // 추출할 구역 패턴, 글로벌 플래그 추가
    
      if (inputString === '') {
        alert('텍스트를 입력하세요.');
        return;
      }
    
      // replace 함수 내에서 랜덤 선택 로직을 적용
      const resultString = inputString.replace(extractPattern, (match, group1) => {
        const choices = group1.split(delimiter);
        const randomChoice = choices[Math.floor(Math.random() * choices.length)];
        return randomChoice;
      });
    
      document.getElementById('result').textContent = resultString; // 결과를 화면에 출력
    }
    </script>

    위의 코드를 활용해서 아래에 직접 구현을 해봤습니다.

    랜덤 단어 추출


    랜덤 문단 뽑기