답변:
간단한 해결책은 다음과 같습니다.
$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 형식이 가정됩니다.
echo date('Y-m-l', strtotime('01-01-2010'));
결과는 2010-01-Friday
입니다. 따라서 하루가 끝나는 시점은 date
함수에 날짜 형식을 지정하는 방법에 따라 다릅니다 .
$date = '25/05/2010'; $date = str_replace('/', '-', $date);
필요합니다. 문제를 해결하기 위해 추가 줄이 필요하지 않습니다.
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 형식이 가정됩니다.
그렇게 간단합니다.
$t
하고 $t1
다른 결과를 표시 할 때 구현할 수 있습니다. 나는 이렇게 확인했다. $t=strtotime(date('d-m-Y'));
와 $t1=strtotime(date('m/d/Y'));
더 나은 해결책을 찾지 못했습니다. 을 사용할 수 있습니다 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));
효과가 있었다!
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 (또는 둘의 조합) 형식의 날짜와 일치합니다.
/보다 많은 구분 기호를 지원하려면 정규식을 다음과 같이 변경할 수 있습니다.
$regex = '#([\d]{1,2})[/-]([\d]{1,2})[/-]([\d]{2,4})#';
그런 다음 [/-]
비트에 원하는 문자를 추가하십시오 (참고 :-문자는 마지막 문자 여야 함).
\d
진수에 대한보다는 [/d]
위한 슬래시 또는 d 문자 .
이 해결 방법은 폭발보다 간단하고 우아합니다.
$my_date = str_replace("/", ".", $my_date);
$my_date = strtotime($my_date);
$my_date = date("Y-m-d", $my_date);
날짜가 어떤 형식인지 알 필요는 없지만 슬래시가 있으면 완전히 정지로 바뀌고 strtotime에 의해 유럽으로 처리됩니다.
가장 간단한 해결책은 다음과 같습니다.
$date = '07/28/2010';
$newdate = date('Y-m-d', strtotime($date));
이처럼 간단
date('Y-m-d H:i:s', strtotime( str_replace('/', '-', $from_date ) ) );
str_replace('/', '-', $date);