나는 그 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이 사용할 수있는 사용 가능한 날짜 / 시간 형식의 전체 목록이 날짜 형식 매뉴얼 페이지 에 나열되어 있습니다. 해당 페이지는 더 철저하게 사실을 설명 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 또는 dmy 형식의 날짜는 다양한 구성 요소 사이의 구분 기호를 보면 명확 해집니다. 구분 기호가 슬래시 (/)이면 미국식 m / d / y로 가정됩니다. 반면 구분 기호가 대시 (-) 또는 점 (.)이면 유럽 dmy 형식이 가정됩니다.
그렇게 간단합니다.
답변
아마도 가장 빠를 것입니다
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));
효과가 있었다!