문자열 11/24/2011 @ 01:15pm
을 UNIX 타임 스탬프로 변환하려고합니다. 형식은 m-d-Y @ h:ia
문자열을 UNIX 타임 스탬프로 변환합니다.
문자열과 함께 작동하지 않을 수 있습니다. 데이터 기능을 되돌릴 수있는 방법이 있습니까? 문자열을 변환하는 새로운 기본이 아닌 PHP 함수를 만드는 유일한 방법은 무엇입니까?
서버에서 CentOS 5, Apache 2.2 및 PHP 5.2.17을 실행 중입니다.
문자열 11/24/2011 @ 01:15pm
을 UNIX 타임 스탬프로 변환하려고합니다. 형식은 m-d-Y @ h:ia
문자열을 UNIX 타임 스탬프로 변환합니다.
문자열과 함께 작동하지 않을 수 있습니다. 데이터 기능을 되돌릴 수있는 방법이 있습니까? 문자열을 변환하는 새로운 기본이 아닌 PHP 함수를 만드는 유일한 방법은 무엇입니까?
서버에서 CentOS 5, Apache 2.2 및 PHP 5.2.17을 실행 중입니다.
PHP 5.2에서, 당신은 타임 스탬프로 결과를 변환 mktime
를 사용 후, 특정 형식으로 날짜 - 시간 문자열을 구문 분석하는 strptime
를 사용할 수 있습니다.
$timeString = '11/24/2011 @ 01:15pm';
$timeArray = strptime($timeString, '%m/%d/%Y @ %I:%M%p');
$timestamp = mktime(
$timeArray['tm_hour'], $timeArray['tm_min'], $timeArray['tm_sec'],
$timeArray['tm_mon']+1, $timeArray['tm_mday'], $timeArray['tm_year']+1900
);
이
는 아마도 두 함수로서 추출한다 : 기간 약어를 파싱function strptimestamp($date, $fmt) {
$timeArray = strptime($date, $fmt);
return mktime(
$timeArray['tm_hour'], $timeArray['tm_min'], $timeArray['tm_sec'],
$timeArray['tm_mon']+1, $timeArray['tm_mday'], $timeArray['tm_year']+1900
);
}
function strpmy($date) {
return strptimestamp($date, '%m/%d/%Y @ %I:%M%p');
}
지원 OS로부터 OS를 다양하게 나타난다. 위의 방법이 특정 OS에서 작동하지 않으면 "% p"대신 "% P"를 시도하거나 strtoupper
(또는 둘 다)을 통해 시간 문자열을 전달하십시오. 다음은 모든 OS에서 작동해야하지만 strptime
을 사용하여 구문 분석 전체를 처리하는 것이 좋습니다. 다음은 일반 strptimestamp
기능의 기본으로 적합하지 않습니다.
static $pm_abbrevs = array('pm' => 1, 'p.m.' => 1, 'µµ' => 1, 'µ.µ.' => 1);
$timeString = '11/24/2011 @ 01:15pm';
$timeArray = strptime($timeString, '%m/%d/%Y @ %I:%M');
$period = strtolower($timeArray['unparsed']);
if (isset($pm_abbrevs[$period])) {
$timeArray['tm_hour'] += 12;
}
$timestamp = mktime(
$timeArray['tm_hour'], $timeArray['tm_min'], $timeArray['tm_sec'],
$timeArray['tm_mon']+1, $timeArray['tm_mday'], $timeArray['tm_year']+1900
);
나는이 대답을 너무 좋아했다. "참고 : 내부적으로이 함수는 시스템의 C 라이브러리에서 제공하는 strptime() 함수를 호출합니다.이 함수는 여러 운영 체제에서 크게 다른 동작을 나타낼 수 있습니다." – nachito
나는 그것을 작동시킬 수 없었다. 나는 centos에있다 – user962449
"작동시키지 못했습니다"라고 말합니다. 정확히 어떻게 작동하지 않았습니까? – outis
더 현대적인 DateTime
클래스를 사용하십시오 (> = 5.3을 사용하는 한).
$unix = DateTime::createFromFormat('m/d/Y @ h:ia', '11/24/2011 @ 01:15pm')
->getTimestamp();
'치명적인 오류 : 정의되지 않은 메서드 호출 DateTime :: createFromFormat()' – user962449
@ user962449 : 이전 PHP 버전 (5.3 이전)이있을 수 있습니다. 'strtotime()'에 맞게 문자열을 미리 처리 할 수 있습니다. – alex
좋은 대답 - 대답뿐 아니라 주석이 필요한 PHP 버전을 지적해야합니다. –
'@'를 공백으로 바꾸면 strtotime이 기본적으로 그것을 이해할 수 있어야합니다.
<?php
$x = "11/24/2011 @ 01:15pm";
$x = str_replace(" @ ", " ", $x);
$y = strtotime($x);
$z = date("m-d-Y @ h:ia", $y);
echo "x: $x<br />\n";
echo "y: $y<br />\n";
echo "z: $z<br />\n";
?>
출력 :
이x: 11/24/2011 01:15pm
y: 1322140500
z: 11-24-2011 @ 01:15pm
도 작동하지 않았다. $ y에는 가치가 없습니다. $ x와 $ z는 괜찮 았어. 죄송합니다. $ y는 값이 없으므로 $ z는'12-31-1969 @ 04:00 pm'입니다. – user962449
게시하기 전에 웹 서버에서 실행했습니다. 내 PHP 버전을 확인하겠습니다. –
동일한 버전 - 5.2.17을 실행 중입니다. –
대소 문자 구분 문제 http://php.net/manual/en/datetime.formats.php 수 있습니다. 아마도 $ x를 strtoupper()
까지 실행 한 다음 str_replace('@', '', $x)
(@가 빈 문자열로 바뀌는 것에 주목하십시오)을 시도한 다음 strtotime()
을 시도하십시오. 희망이 도움이됩니다.
$search = array('/',',','@');
$replace = array('-','','');
echo strtotime(str_replace($search,$replace,'16/7/2013 @ 7:30AM'));
이것은 strtotime에 허용되는 형식으로 변환하려는 문자열의 문자열 부분을 대체합니다. 배열로 대체 할 문자열 부분을 더 추가 할 수 있습니다.
또한 최신 PHP가 필요하지 않습니다.
출력 : 당신을 "유닉스"로 변환하려고하지 않는
1373952600
, 즉 매우 다른 것이 될 것입니다. 용어가 고정되었습니다. – deceze
"기본이 아닌"기능이란 무엇입니까? 나머지 시스템 세부 사항 (OS 및 C)은 무엇입니까? – outis
일반 cpanel 서버입니다. Centos 5, apache 2.2 등 – user962449