복붙노트

PHP에서 한 날짜 형식을 다른 날짜 형식으로 변환

PHP

PHP에서 한 날짜 형식을 다른 날짜 형식으로 변환

PHP에서 한 날짜 형식을 다른 날짜 형식으로 변환하는 간단한 방법이 있습니까?

나는 이것을 가지고있다:

$old_date = date('y-m-d-h-i-s');            // works

$middle = strtotime($old_date);             // returns bool(false)

$new_date = date('Y-m-d H:i:s', $middle);   // returns 1970-01-01 00:00:00

그러나 나는 당연히 균열보다는 오히려 현재 날짜를 돌려 보내는 것을 좋아할 것입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

해결법

  1. ==============================

    1.

    date ()의 두 번째 매개 변수는 적절한 타임 스탬프 (1970 년 1 월 1 일 이후의 초) 여야합니다. date ()가 인식 할 수없는 문자열을 전달 중입니다.

    strtotime ()을 사용하여 날짜 문자열을 타임 스탬프로 변환 할 수 있습니다. 그러나 strtotime ()조차도 y-m-d-h-i-s 형식을 인식하지 못합니다.

    PHP 5.3 이상

    DateTime :: createFromFormat을 사용하십시오. date () 구문을 사용하여 정확한 마스크를 지정하여 들어오는 문자열 날짜를 구문 분석 할 수 있습니다.

    PHP 5.2 이하

    substr ()을 사용하여 수동으로 요소 (년, 월, 일,시, 분, 초)를 구문 분석하고 결과를 mktime ()에 전달하면 타임 스탬프가 작성됩니다.

    그러나 그것은 많은 작업입니다! strftime ()이 이해할 수있는 다른 형식을 사용하는 것이 좋습니다. strftime ()은 joe가 얼음 위에서 미끄러지는 다음 번 입력이 부족한 모든 날짜를 인식합니다. 예를 들면 다음과 같습니다.

    $old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
    $old_date_timestamp = strtotime($old_date);
    $new_date = date('Y-m-d H:i:s', $old_date_timestamp);   
    
  2. ==============================

    2.

    가장 쉬운 방법은 다음과 같습니다.

    $myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
    $newDateString = $myDateTime->format('m/d/Y');
    

    먼저 $ date String이있는 형식을 지정하고 $ new Date String을 원하는 형식으로 지정합니다.

    이것은 또한 strtotime의 사용을 피하는데, 때때로 작동하기 어려울 수 있습니다.

    한 날짜 형식에서 다른 날짜 형식으로 변환하지 않고 현재 날짜 (또는 datetime)를 특정 형식으로 지정하려는 경우 더 쉽습니다.

    $now = new DateTime();
    $timestring = $now->format('Y-m-d h:i:s');
    

    이 다른 질문은 동일한 주제를 참조합니다. 날짜 형식을 yyyy-mm-dd => dd-mm-yyyy로 변환하십시오.

  3. ==============================

    3.

    기본 사항

    하나의 날짜 형식을 다른 형식으로 변환하는 단순한 방법은 date ()와 함께 strtotime ()을 사용하는 것입니다. strtotime ()은 날짜를 Unix Timestamp로 변환합니다. 그런 다음 Unix Timestamp를 date ()에 전달하여 새로운 형식으로 변환 할 수 있습니다.

    $timestamp = strtotime('2008-07-01T22:35:17.02');
    $new_date_format = date('Y-m-d H:i:s', $timestamp);
    

    또는 한 - 라이너로 :

    $new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
    

    strtotime ()은 날짜가 유효한 형식이어야 함을 명심하십시오. 유효한 형식을 제공하지 않으면 strtotime ()이 false를 반환하여 날짜가 1969-12-31이됩니다.

    DateTime () 사용

    PHP 5.2에서 PHP는 DateTime () 클래스를 제공하여 날짜 (및 시간) 작업을위한보다 강력한 도구를 제공합니다. DateTime ()을 사용하여 위의 코드를 다시 작성할 수 있습니다.

    $date = new DateTime('2008-07-01T22:35:17.02');
    $new_date_format = $date->format('Y-m-d H:i:s');
    

    유닉스 타임 스탬프 작업

    date ()는 Unix 타임 스탬프를 두 번째 매개 변수로 사용하여 형식화 된 날짜를 반환합니다.

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

    DateTime ()은 타임 스탬프 이전에 @를 추가하여 유닉스 타임 스탬프와 함께 작동합니다.

    $date = new DateTime('@1234567890');
    $new_date_format = $date->format('Y-m-d H:i:s');
    

    보유한 타임 스탬프가 밀리 초 (000으로 끝나거나 타임 스탬프가 13 자 길이) 인 경우 다른 형식으로 변환하려면 초로 변환해야합니다. 이 작업에는 두 가지 방법이 있습니다.

    마지막 세 자리를 다듬는 것은 여러 가지 방법으로 얻을 수 있지만 substr ()을 사용하는 것이 가장 쉽습니다.

    $timestamp = substr('1234567899000', -3);
    

    타임 스탬프를 1000으로 나누어 초로 변환 할 수도 있습니다. 타임 스탬프가 너무 커서 32 비트 시스템에서 수학을 수행 할 수 없으므로 수학을 문자열로 사용하려면 BCMath 라이브러리를 사용해야합니다.

    $timestamp = bcdiv('1234567899000', '1000');
    

    Unix Timestamp를 얻으려면 strtotime ()을 사용하여 Unix Timestamp를 반환하면됩니다 :

    $timestamp = strtotime('1973-04-18');
    

    DateTime ()을 사용하면 DateTime :: getTimestamp ()를 사용할 수 있습니다.

    $date = new DateTime('2008-07-01T22:35:17.02');
    $timestamp = $date->getTimestamp();
    

    PHP 5.2를 실행중인 경우 대신 U 형식 지정 옵션을 사용할 수 있습니다.

    $date = new DateTime('2008-07-01T22:35:17.02');
    $timestamp = $date->format('U');
    

    비표준 및 애매한 날짜 형식 작업

    불행히도 개발자가 작업해야하는 모든 날짜가 표준 형식이 아닙니다. 다행히도 PHP 5.3은이를위한 솔루션을 제공했습니다. DateTime :: createFromFormat ()을 사용하면 날짜 문자열이있는 형식을 PHP에 알릴 수 있으므로 추가 조작을 위해 DateTime 객체로 성공적으로 파싱 할 수 있습니다.

    $date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
    $new_date_format = $date->format('Y-m-d H:i:s');
    

    PHP 5.4에서 DateTime () 코드를 한 줄로 바꿀 수있는 인스턴스 생성시 클래스 멤버 액세스 기능이 추가되었습니다.

    $new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
    
    $new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');
    
  4. ==============================

    4.

    이 시도:

    $old_date = date('y-m-d-h-i-s');
    $new_date = date('Y-m-d H:i:s', strtotime($old_date));
    
  5. ==============================

    5.

    $ date를 dd-mm-yyyy hh : mm : ss에서 적절한 MySQL datetime으로 변환하려면 나는 이렇게 간다.

    $date = DateTime::createFromFormat('d-m-Y H:i:s',$date)->format('Y-m-d H:i:s');
    
  6. ==============================

    6.

    $old_date = date('y-m-d-h-i-s');       // works
    

    너는 여기에서 잘못하고있다.

    $old_date = date('y-m-d h:i:s');       // works
    

    시간의 구분 기호는 ':'입니다.

    나는 이것이 도움이 될 것 같아 ...

    $old_date = date('y-m-d-h-i-s');              // works
    
    preg_match_all('/(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)/', $old_date, $out, PREG_SET_ORDER);
    $out = $out[0];
    $time = mktime($out[4], $out[5], $out[6], $out[2], $out[3], $out[1]);
    
    $new_date = date('Y-m-d H:i:s', $time); 
    

    또는

    $old_date = date('y-m-d-h-i-s');              // works
    
    $out = explode('-', $old_date);
    $time = mktime($out[3], $out[4], $out[5], $out[1], $out[2], $out[0]);
    
    $new_date = date('Y-m-d H:i:s', $time); 
    
  7. ==============================

    7.

    다음은 날짜를 다른 형식으로 변환하는 쉬운 방법입니다.

    // Create a new DateTime object
    $date = DateTime::createFromFormat('Y-m-d', '2016-03-25');
    
    // Output the date in different formats
    echo $date->format('Y-m-d')."\n";
    echo $date->format('d-m-Y')."\n";
    echo $date->format('m-d-Y')."\n";
    
  8. ==============================

    8.

    date 함수는 두 번째 인수로 타임 스탬프가 필요하므로 $ old_date를 타임 스탬프로 다시 변환해야합니다.

  9. ==============================

    9.

    strtotime 그것을 밖으로 작동합니다. 날짜는 동일하지 않고 모두 미국식 형식입니다.

    <?php
    $e1 = strtotime("2013-07-22T12:00:03Z");
    echo date('y.m.d H:i', $e1);
    echo "2013-07-22T12:00:03Z";
    
    $e2 = strtotime("2013-07-23T18:18:15Z");
    echo date ('y.m.d H:i', $e2);
    echo "2013-07-23T18:18:15Z";
    
    $e1 = strtotime("2013-07-21T23:57:04Z");
    echo date ('y.m.d H:i', $e2);
    echo "2013-07-21T23:57:04Z";
    ?>
    
  10. ==============================

    10.

    이 시도:

    $tempDate = explode('-','03-23-15');
    $date = '20'.$tempDate[2].'-'.$tempDate[0].'-'.$tempDate[1];
    
  11. ==============================

    11.

    이 기본 방법은 입력 된 모든 형식을 원하는 형식으로 변환하는 데 도움이됩니다.

    $formatInput = 'd-m-Y'; //Give any format here, this would be converted into your format
    $dateInput = '01-02-2018'; //date in above format
    
    $formatOut = 'Y-m-d'; // Your format
    $dateOut = DateTime::createFromFormat($formatInput, $dateInput)->format($formatOut);
    
  12. ==============================

    12.

    이것은 나를 위해 해결,

    $old = '18-04-2018';
    $new = date('Y-m-d', strtotime($old));
    echo $new;
    

    산출 : 2018-04-18

  13. ==============================

    13.

    이것은 날짜 형식을 변환 할 수있는 다른 방법입니다.

     <?php
    $pastDate = "Tuesday 11th October, 2016";
    $pastDate = str_replace(",","",$pastDate);
    
    $date = new DateTime($pastDate);
    $new_date_format = $date->format('Y-m-d');
    
    echo $new_date_format.' 23:59:59'; ?>
    
  14. ==============================

    14.

    문자열을 사용하는 것만으로도 좋은 해결책이되고 mysql에 대한 문제는 줄어든다. 현재 형식을 감지하고 필요한 경우 변경합니다.이 솔루션은 PHP / datetime 기능을 사용하지 않고 스페인어 / 프랑스어 형식 및 영어 형식에만 사용됩니다.

    class dateTranslator {
    
     public static function translate($date, $lang) {
          $divider = '';
    
          if (empty($date)){
               return null;   
          }
          if (strpos($date, '-') !== false) {
               $divider = '-';
          } else if (strpos($date, '/') !== false) {
               $divider = '/';
          }
          //spanish format DD/MM/YYYY hh:mm
          if (strcmp($lang, 'es') == 0) {
    
               $type = explode($divider, $date)[0];
               if (strlen($type) == 4) {
                    $date = self::reverseDate($date,$divider);
               } 
               if (strcmp($divider, '-') == 0) {
                    $date = str_replace("-", "/", $date);
               }
          //english format YYYY-MM-DD hh:mm
          } else {
    
               $type = explode($divider, $date)[0];
               if (strlen($type) == 2) {
    
                    $date = self::reverseDate($date,$divider);
               } 
               if (strcmp($divider, '/') == 0) {
                    $date = str_replace("/", "-", $date);
    
               }   
          }
          return $date;
     }
    
     public static function reverseDate($date) {
          $date2 = explode(' ', $date);
          if (count($date2) == 2) {
               $date = implode("-", array_reverse(preg_split("/\D/", $date2[0]))) . ' ' . $date2[1];
          } else {
               $date = implode("-", array_reverse(preg_split("/\D/", $date)));
          }
    
          return $date;
     }
    

    용도

    dateTranslator::translate($date, 'en')
    
  15. from https://stackoverflow.com/questions/2167916/convert-one-date-format-into-another-in-php by cc-by-sa and MIT lisence