문자열을 Date 및 DateTime으로 변환
mm-dd-YYYY
(예 : 10-16-2003) 형식의 PHP 문자열이있는 경우 어떻게 형식 을 a로 변환 Date
한 다음 ? DateTime
형식으로 변환 YYYY-mm-dd
합니까? 나는 모두에게 유일한 이유 Date
와 DateTime
내가 한 자리에 하나, 그리고 다른 자리에 다른 사람을 필요로하기 때문에입니다.
사용 strtotime()
후 첫 데이트에 date('Y-m-d')
다시 변환 :
$time = strtotime('10/16/2003');
$newformat = date('Y-m-d',$time);
echo $newformat;
// 2003-10-16
함수 에서 슬래시 /
와 하이픈 -
을 사용하는 것에는 차이 가 strtotime()
있습니다. php.net에서 인용하려면 :
m / d / y 또는 dmy 형식의 날짜는 다양한 구성 요소 사이의 구분 기호를 보면 명확 해집니다. 구분 기호가 슬래시 (/)이면 미국식 m / d / y로 가정됩니다. 반면 구분 기호가 대시 (-) 또는 점 (.)이면 유럽 dmy 형식이 가정됩니다.
m / d / Y 및 mdY 형식에주의해야합니다. PHP /
는 m / d / Y -
를 의미하고 dmY를 의미합니다. 이 경우 입력 형식을 명시 적으로 설명합니다.
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
그런 식으로 당신은 어떤 해석의 변덕에 있지 않습니다.
날짜를 구문 분석하려면 다음을 사용해야합니다. DateTime :: createFromFormat ();
전의:
$dateDE = "16/10/2013";
$dateUS = \DateTime::createFromFormat("d.m.Y", $dateDE)->format("m/d/Y");
그러나 다음과 같이 충돌하기 때문에주의하십시오.
PHP Fatal error: Call to a member function format() on a non-object
실제로 먼저 서식이 올바르게 설정되었는지 확인해야합니다.
$dateDE = "16/10/2013";
$dateObj = \DateTime::createFromFormat("d.m.Y", $dateDE);
if (!$dateObj)
{
throw new \UnexpectedValueException("Could not parse the date: $date");
}
$dateUS = $dateObj->format("m/d/Y");
이제 충돌하는 대신 예외를 얻습니다.이 예외는 잡거나 전파 할 수 있습니다.
$ dateDE의 형식이 잘못되었습니다. "16.10.2013"이어야합니다.
$d = new DateTime('10-16-2003');
$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16
편집 : 또한 DateTimeZone을 DateTime () 생성자로 전달하여 서버 기본 시간대가 아닌 원하는 시간대에 대한 날짜를 만들 수 있습니다.
PHP에서 dd-mm-yyyy 형식을 사용하면 예상대로 작동하지 않습니다. PHP 문서에는 아래 지침이 있습니다.
m / d / y 또는 dmy 형식의 날짜는 다양한 구성 요소 사이의 구분 기호를 보면 명확 해집니다. 구분 기호가 슬래시 (/)이면 미국식 m / d / y로 가정됩니다. 반면 구분 기호가 대시 (-) 또는 점 (.)이면 유럽 dmy 형식이 가정됩니다.
따라서 원하는대로 사용할 수 없습니다. 이것과 함께 dd / mm / yyyy 형식을 사용하려고하면 FALSE가 제거됩니다. 다음과 같이 조정할 수 있습니다.
$date = "23/02/2013";
$timestamp = strtotime($date);
if ($timestamp === FALSE) {
$timestamp = strtotime(str_replace('/', '-', $date));
}
echo $timestamp; // prints 1361577600
첫 데이트
$_firstDate = date("m-d-Y", strtotime($_yourDateString));
새로운 날짜
$_newDate = date("Y-m-d",strtotime($_yourDateString));
날짜가 "07 / May / 2018"이고 mysql 호환 날짜가 "2018-05-07"인 것처럼
if (!empty($date)) {
$timestamp = strtotime($date);
if ($timestamp === FALSE) {
$timestamp = strtotime(str_replace('/', '-', $date));
}
$date = date('Y-m-d', $timestamp);
}
그것은 나를 위해 작동합니다. 즐겨 :)
아무도 이것을 언급하지 않았으므로 다른 방법이 있습니다.
$date = date_create_from_format("m-d-Y", "10-16-2003")->format("Y-m-d");
유럽식 형식 (일, 월, 년으로 대시 또는 기간 사용)에 대해 미국식 순서 (월, 날짜, 연도)를 사용하여 날짜를 허용하고 다른 형식은 계속 허용 하려면 DateTime 클래스를 확장 할 수 있습니다.
/**
* Quietly convert European format to American format
*
* Accepts m-d-Y, m-d-y, m.d.Y, m.d.y, Y-m-d, Y.m.d
* as well as all other built-in formats
*
*/
class CustomDateTime extends DateTime
{
public function __construct(string $time="now", DateTimeZone $timezone = null)
{
// convert m-d-y or m.d.y to m/d/y to avoid PHP parsing as d-m-Y (substr avoids microtime error)
$time = str_replace(['-','.'], '/', substr($time, 0, 10)) . substr($time, 10 );
parent::__construct($time, $timezone);
}
}
// usage:
$date = new CustomDateTime('7-24-2019');
print $date->format('Y-m-d');
// => '2019-07-24'
또는 mdY를 수락하고 Ymd를 출력하는 기능을 만들 수 있습니다.
/**
* Accept dates in various m, d, y formats and return as Y-m-d
*
* Changes PHP's default behaviour for dates with dashes or dots.
* Accepts:
* m-d-y, m-d-Y, Y-m-d,
* m.d.y, m.d.Y, Y.m.d,
* m/d/y, m/d/Y, Y/m/d,
* ... and all other formats natively supported
*
* Unsupported formats or invalid dates will generate an Exception
*
* @see https://www.php.net/manual/en/datetime.formats.date.php PHP formats supported
* @param string $d various representations of date
* @return string Y-m-d or '----' for null or blank
*/
function asYmd($d) {
if(is_null($d) || $d=='') { return '----'; }
// convert m-d-y or m.d.y to m/d/y to avoid PHP parsing as d-m-Y
$d = str_replace(['-','.'], '/', $d);
return (new DateTime($d))->format('Y-m-d');
}
// usage:
<?= asYmd('7-24-2019') ?>
// or
<?php echo asYmd('7-24-2019'); ?>
참고 URL : https://stackoverflow.com/questions/6238992/converting-string-to-date-and-datetime
'Programing' 카테고리의 다른 글
Android 알림 대화 상자에 목록보기를 표시하려면 어떻게해야합니까? (0) | 2020.03.27 |
---|---|
MySql 서버 시작 오류 'PID 파일을 업데이트하지 않고 서버가 종료되었습니다' (0) | 2020.03.27 |
Vim : 여러 줄에 같은 문자를 삽입 (0) | 2020.03.27 |
서로 다른 크기의 사각형을 가능한 가장 작은 사각형으로 압축하는 데 어떤 알고리즘을 사용할 수 있습니까? (0) | 2020.03.27 |
Visual Studio Community는 30 일 평가판입니까? (0) | 2020.03.27 |