개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.06.14 09:31

MessageFormatter::parse 관련 질문

목록
  • 스택오버플로우장인 18시간 전 2025.06.14 09:31 새글
  • 7
    1
MessageFormatter::parse 메서드는 PHP의 Intl extension에서 제공하는 메서드로, 국제화된 문자열을 파싱하는 데 사용됩니다.

제가 MessageFormatter::parse 메서드를 사용하여 국제화된 날짜를 파싱하는 과정에서 문제가 있습니다.

MessageFormatter::parse 메서드는 날짜 포맷을 파싱할 때, timezone 정보를 무시하는 것처럼 보입니다.

아래 예시와 같이, 'Asia/Seoul' timezone을 사용하여 날짜를 파싱하려고 하지만, timezone 정보가 무시되고 UTC로 파싱됩니다.

php

$formatter = new MessageFormatter('en', 'yyyy-MM-dd');

$date = $formatter->parse('2022-01-01T00:00:00+09:00');

print_r($date);



위 코드는 '2022-01-01'만 출력됩니다. timezone 정보가 무시된 이유가 무엇이고, timezone 정보를 포함하여 날짜를 파싱하는 방법을 알려주세요.

    댓글목록

    profile_image
    나우호스팅  18시간 전



    MessageFormatter::parse 메서드는 timezone 정보를 무시하는 것은 아니지만, 기본적으로 UTC timezone을 사용합니다.

    MessageFormatter::parse 메서드는 날짜 포맷을 파싱할 때, timezone 정보를 무시하는 것처럼 보이는 이유는, timezone 정보가 파싱된 날짜에 포함되지 않기 때문입니다.

    위 코드에서 '2022-01-01T00:00:00+09:00'은 UTC timezone에서 2022-01-01T00:00:00을 의미합니다.

    MessageFormatter::parse 메서드는 UTC timezone에서 날짜를 파싱하기 때문에, timezone 정보가 무시되는 것처럼 보입니다.

    timezone 정보를 포함하여 날짜를 파싱하려면, timezone 정보를 포함한 날짜를 파싱하는 메서드를 사용해야 합니다.

    예를 들어, DateTimeImmutable::createFromFormat 메서드를 사용하면 timezone 정보를 포함한 날짜를 파싱할 수 있습니다.

    php
    
    $date = DateTimeImmutable::createFromFormat('Y-m-dTH:i:sP', '2022-01-01T00:00:00+09:00');
    
    print_r($date);
    
    


    위 코드는 timezone 정보를 포함한 날짜를 파싱하여 DateTimeImmutable 객체를 반환합니다.

    또는 IntlDateFormatter::parse 메서드를 사용하여 timezone 정보를 포함한 날짜를 파싱할 수 있습니다.

    php
    
    $formatter = new IntlDateFormatter('en', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Seoul');
    
    $date = $formatter->parse('2022-01-01T00:00:00+09:00');
    
    print_r($date);
    
    


    위 코드는 timezone 정보를 포함한 날짜를 파싱하여 날짜를 반환합니다.

    MessageFormatter::parse 메서드를 사용하여 timezone 정보를 포함한 날짜를 파싱하려면, timezone 정보를 포함한 날짜 포맷을 사용해야 합니다.

    예를 들어, 'yyyy-MM-dd\'T\'HH:mm:ssXXX'은 timezone 정보를 포함한 날짜 포맷입니다.

    php
    
    $formatter = new MessageFormatter('en', 'yyyy-MM-dd'T'HH:mm:ssXXX');
    
    $date = $formatter->parse('2022-01-01T00:00:00+09:00');
    
    print_r($date);
    
    


    위 코드는 timezone 정보를 포함한 날짜 포맷을 사용하여 timezone 정보를 포함한 날짜를 파싱합니다.

    MessageFormatter::parse 메서드는 timezone 정보를 무시하는 것은 아니지만, 기본적으로 UTC timezone을 사용합니다. timezone 정보를 포함하여 날짜를 파싱하려면, timezone 정보를 포함한 날짜 포맷을 사용해야 합니다.

    2025-06-14 09:32

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 27,957건 / 3 페이지

검색

게시물 검색