programing

strtotime()은 dd/mm/YYY 형식에서 작동하지 않습니다.

sourcejob 2022. 9. 21. 23:28
반응형

strtotime()은 dd/mm/YYY 형식에서 작동하지 않습니다.

정말 마음에 들어요.strtotime()기능하지만 사용자 설명서에서 지원되는 날짜 형식에 대한 완전한 설명을 제공하지 않습니다. strtotime('dd/mm/YYYY')동작하지 않는다.mm/dd/YYYY포맷합니다.

다음 날짜에 데이트가 있는 경우dd/mm/YYYY포맷, 변환 방법YYYY-mm-dd를 사용하여 할 수 있습니다.explode()하지만 더 나은 해결책이 있을 것 같아요.

간단한 솔루션은 다음과 같습니다.

$date = '25/05/2010';
$date = str_replace('/', '-', $date);
echo date('Y-m-d', strtotime($date));

결과:

2010-05-25

메뉴얼에는, 다음과 같이 기재되어 있습니다.

m/d/y 또는 d-m-y 형식의 날짜는 다양한 구성요소 사이의 구분자를 보면 명확해진다. 구분자가 슬래시(/)인 경우 미국식 m/d/y를 가정하고 구분자가 대시(-) 또는 점(.)인 경우 유럽식 d-m-y 형식을 가정한다.

DateTime::createFromFormat을 사용하여 커스텀 포맷(PHP 5.3 기준)에서 날짜를 해석할 수 있습니다.

$timestamp = DateTime::createFromFormat('!d/m/Y', '23/05/2010')->getTimestamp();

(애드사이드: The!는, Unix 타임스탬프에 미지정치를 리셋 하기 위해서 사용합니다(시각은 자정이 됩니다).


PHP 5.3을 사용하지 않거나 사용할 수 없는 경우 strtotime이 허용하는 사용 가능한 날짜/시간 형식의 전체 목록이 날짜 형식 매뉴얼 페이지에 나열됩니다.이 페이지는 ...라는 사실을 더욱 상세하게 기술하고 있다.m/d/Y에 대해 추론되다d/m/Y(단, 여기 답변에서 언급한 바와 같이d-m-Y,d.m.Y또는d\tm\tY).


예전에도 퀵키에 의존했었는데str_replace다른 답변에서 언급되고 날짜 문자열을 다음과 같은 다른 형식으로 자동 변환합니다.

$subject   = '23/05/2010';
$formatted = vsprintf('%3$04d/%2$02d/%1$02d', sscanf($subject,'%02d/%02d/%04d'));
$timestamp = strtotime($formatted);

이것은 많은 문제에 대한 좋은 해결책입니다.

function datetotime ($date, $format = 'YYYY-MM-DD') {

    if ($format == 'YYYY-MM-DD') list($year, $month, $day) = explode('-', $date);
    if ($format == 'YYYY/MM/DD') list($year, $month, $day) = explode('/', $date);
    if ($format == 'YYYY.MM.DD') list($year, $month, $day) = explode('.', $date);

    if ($format == 'DD-MM-YYYY') list($day, $month, $year) = explode('-', $date);
    if ($format == 'DD/MM/YYYY') list($day, $month, $year) = explode('/', $date);
    if ($format == 'DD.MM.YYYY') list($day, $month, $year) = explode('.', $date);

    if ($format == 'MM-DD-YYYY') list($month, $day, $year) = explode('-', $date);
    if ($format == 'MM/DD/YYYY') list($month, $day, $year) = explode('/', $date);
    if ($format == 'MM.DD.YYYY') list($month, $day, $year) = explode('.', $date);

    return mktime(0, 0, 0, $month, $day, $year);

}

STRTOTIME 기입 메모:

m/d/y 또는 d-m-y 형식의 날짜는 다양한 구성요소 사이의 구분자를 보면 명확해진다. 구분자가 슬래시(/)인 경우 미국식 m/d/y를 가정하고 구분자가 대시(-) 또는 점(.)인 경우 유럽식 d-m-y 형식을 가정한다.

그것은 저것만큼 간단하다.

$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');

이거면 될 거야.String을 커스텀 날짜 형식으로 변환하면 String의 원래 형식을 PHP로 지정할 수 있습니다.이제 날짜 형식이므로 MySQL에서 사용하는 것과 동일한 PHP의 기본 날짜 형식으로 변환할 수 있습니다.

아마 가장 빠를 것이다

false!== ($date !== $date=preg_replace(';[0-2]{2}/[0-2]{2}/[0-2]{2};','$3-$2-$1',$date))

형식이 적절한 것 같지 않으면 false를 반환하지만 날짜가 유효한지 여부를 확인하지 않습니다.

을 ddmmyyyy 형식으로 변환하려고 .date("Y-m-d", 직접 하면 동작하지 않습니다.ddmmyy =date('dmy')

yyy-mm-dd 형식이어야 한다는 것을 깨달았습니다.서브스트링을 사용하여 정리하다

$strParam = '20'.substr($_GET['date'], 4, 2).'-'.substr($_GET['date'], 2, 2).'-'.substr($_GET['date'], 0, 2);  

그 후 로 넘어갔다.date("Y-m-d",strtotime($strParam));

성공했어!

나는 더 나은 해결책을 찾지 못했다.하시면 됩니다.explode(),preg_match_all() 등등.

저는 이렇게 스태틱 도우미 기능이 있습니다.

class Date {

    public static function ausStrToTime($str) {
        $dateTokens = explode('/', $str);
        return strtotime($dateTokens[1] . '/' . $dateTokens[0] . '/' . $dateTokens[2]); 

    }

}

아마 더 좋은 이름이 있을 거예요. 하지만 저는 이 이름을ausStrToTime()왜냐하면 호주의 데이트(호주인이기 때문에 자주 상대하고 있습니다)에 대응하고 있기 때문입니다.더 좋은 이름이 표준화된 이름일 수도 있지만, 그게 뭔지는 잘 모르겠어요.

데이터베이스에서 이 값을 가져오고 있습니까?경우 하는 것을 (「」를 사용합니다).date_format"mysql" " ) 。그렇지 않은 경우 strtotime이 dd/mm/yyy 값을 인식하지 못하는 것 같기 때문에 값을 폭발시키는 것이 최선일 수 있습니다.

만약 당신이 그것 dd/mm/YYYY에, 그래서: 할 수 있다.

    $regex = '#([/d]{1,2})/([/d]{1,2})/([/d]{2,4})#';
    $match = array();
    if (preg_match($regex, $date, $match)) {
        if (strlen($match[3]) == 2) {
            $match[3] = '20' . $match[3];
        }
        return mktime(0, 0, 0, $match[2], $match[1], $match[3]);
    }
    return strtotime($date);

그것은 형태 d/m/YY 또는dd/mm/YYYY(2의 혹은 그런 조건들의 조합)의 날짜에 잘 어울린다...

만약 당신이 이상의 구분 기호를 제공하고 싶습니다./당신에게:regex을 바꿀 수 있다.

    $regex = '#([\d]{1,2})[/-]([\d]{1,2})[/-]([\d]{2,4})#';

에 이 에 원하는 를 넣으세요.[/-] - .)

이 해결 방법과 좀 더 우아한 것을 폭발시키보다 더 간단하다.

$my_date = str_replace("/", ".", $my_date);
$my_date = strtotime($my_date);
$my_date = date("Y-m-d", $my_date);

당신은 당신이 형식은 날짜에서 알 계획인데, 백 슬래시로 와서 그들은 모든 정류장과 한국이 유럽으로 strtotime에 의해 치료를 받다 교체되지 않아도 된다.

이 작은

date('Y-m-d H:i:s', strtotime( str_replace('/', '-', $from_date ) ) );

가장 간단한 해결책은 이:.

$date    = '07/28/2010';
$newdate = date('Y-m-d', strtotime($date));

하더라도 0은 거기 있어 나는 사용하고 있는 이가 해결책입니다.

<?php
 $date = '05/05/2017';
 $date = str_replace('/', '-', $date);
 $date = date('Y-m-d', strtotime($date));

 echo $date;
?>

달러date_info='20/02/2019, 반향 date('Y-m-d의, strtotime(str_replace('/'는, '-의달러 date_info)));.

만약 아무것도 소용이 없었단다, 이 해 보세요.

$date = '25/05/2010'; //dd/mm/YYYY
$dateAr = explode('/',);
$date = $dateAr[2].'-'.$dateAr[1].'-'.$dateAr[0]; //YYYY-mm-dd
{{ date('d F Y',strtotime($a->dates)) }}

대체 사용laravel

\Carbon\Carbon::parse($a->dates)->format('d F Y') }}

언급URL:https://stackoverflow.com/questions/2891937/strtotime-doesnt-work-with-dd-mm-yyyy-format

반응형