Strtotime ()이 dd / mm / YYYY 형식에서 작동하지 않습니다
나는 그 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 또는 dmy 형식의 날짜 는 다양한 구성 요소 사이의 구분 기호를 보면 명확 해집니다. 구분 기호가 슬래시 ( / )이면 미국의 m / d / y 가 가정됩니다. 반면 구분 기호가 대시 ( - ) 또는 점 ( . )이면 유럽 dmy 형식이 가정됩니다.
DateTime :: createFromFormat을 사용 하여 (PHP 5.3부터) 사용자 정의 형식의 날짜를 구문 분석 할 수 있습니다
$timestamp = DateTime::createFromFormat('!d/m/Y', '23/05/2010')->getTimestamp();
(외부 : !
은 지정되지 않은 값을 유닉스 타임 스탬프로 재설정하는 데 사용됩니다. 즉, 시간은 자정입니다.)
PHP 5.3을 사용하지 않거나 사용하지 않으려면 strtotime이 허용하는 사용 가능한 날짜 / 시간 형식의 전체 목록이 Date Formats 매뉴얼 페이지 에 나열되어 있습니다. 해당 페이지는 더 철저하게 사실을 설명 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);
STRTOTIME 기록에서 참고 :
m / d / y 또는 dmy 형식의 날짜는 다양한 구성 요소 사이의 구분 기호를 보면 명확 해집니다. 구분 기호가 슬래시 (/)이면 미국식 m / d / y로 가정됩니다. 반면 구분 기호가 대시 (-) 또는 점 (.)이면 유럽 dmy 형식이 가정됩니다.
그렇게 간단합니다.
이것은 많은 문제에 대한 좋은 해결책입니다.
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);
}
아마도 가장 빠를 것입니다
false!== ($date !== $date=preg_replace(';[0-2]{2}/[0-2]{2}/[0-2]{2};','$3-$2-$1',$date))
형식이 올바른 형식이 아닌 경우 false를 반환하지만 날짜가 유효한지 확인하지 않습니다.
더 나은 해결책을 찾지 못했습니다. 당신은 사용할 수 있습니다 explode()
, preg_match_all()
등
이런 정적 도우미 기능이 있습니다
class Date {
public static function ausStrToTime($str) {
$dateTokens = explode('/', $str);
return strtotime($dateTokens[1] . '/' . $dateTokens[0] . '/' . $dateTokens[2]);
}
}
아마도 더 좋은 이름이있을 것입니다.하지만 ausStrToTime()
호주 날짜 (호주 호주 인이기 때문에 종종 다루는 날짜)와 작동 하기 때문에 사용 합니다. 더 나은 이름은 아마도 표준화 된 이름 일 것입니다. 그러나 그것이 무엇인지 잘 모르겠습니다.
ddmmyy 형식을 date("Y-m-d"
형식 으로 변환하려고했지만 직접 전달할 때 작동하지 않았습니다.ddmmyy =date('dmy')
그런 다음 yyyy-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));
효과가 있었다!
Are you getting this value from a database? If so, consider formatting it in the database (use date_format
in mysql, for example). If not, exploding the value may be the best bet, since strtotime just doesn't seem to appreciate dd/mm/yyyy values.
If you know it's in dd/mm/YYYY, you can do:
$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);
It will match dates in the form d/m/YY or dd/mm/YYYY (or any combination of the two)...
If you want to support more separators than just /, you can change the regex to:
$regex = '#([\d]{1,2})[/-]([\d]{1,2})[/-]([\d]{2,4})#';
And then add any characters you want into the [/-]
bit (Note, the - character needs to be last)
This workaround is simpler and more elegant than explode:
$my_date = str_replace("/", ".", $my_date);
$my_date = strtotime($my_date);
$my_date = date("Y-m-d", $my_date);
You don't have to know what format you're getting the date in, but if it comes with slashes they are replaced with full stops and it is treated as European by strtotime.
$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');
This will work for you. You convert the String into a custom date format where you can specify to PHP what the original format of the String is that had been given to it. Now that it is a date format, you can convert it to PHP's default date format, which is the same that is used by MySQL.
The simplest solution is this:
$date = '07/28/2010';
$newdate = date('Y-m-d', strtotime($date));
This the solution i'm using even if the leading zero are there.
<?php
$date = '05/05/2017';
$date = str_replace('/', '-', $date);
$date = date('Y-m-d', strtotime($date));
echo $date;
?>
$date_info = '20/02/2019'; echo date('Y-m-d', strtotime(str_replace('/', '-', $date_info) ));
참고URL : https://stackoverflow.com/questions/2891937/strtotime-doesnt-work-with-dd-mm-yyyy-format
'Programing' 카테고리의 다른 글
정적 컨텍스트에서 리소스 컨텐츠를 얻으려면 어떻게해야합니까? (0) | 2020.06.04 |
---|---|
Laravel의 Eloquent 타임 스탬프 비활성화 (0) | 2020.06.04 |
iOS 시뮬레이터 : 앱을 닫는 방법 (0) | 2020.06.04 |
링크를 사용하여 JavaScript를 호출하는 방법은 무엇입니까? (0) | 2020.06.04 |
AWS 오류 메시지 : 현재이 리소스에 대해 충돌하는 조건부 작업이 진행 중입니다 (0) | 2020.06.04 |