2011-11-24 2 views
2

문자열 11/24/2011 @ 01:15pm을 UNIX 타임 스탬프로 변환하려고합니다. 형식은 m-d-Y @ h:ia문자열을 UNIX 타임 스탬프로 변환합니다.

문자열과 함께 작동하지 않을 수 있습니다. 데이터 기능을 되돌릴 수있는 방법이 있습니까? 문자열을 변환하는 새로운 기본이 아닌 PHP 함수를 만드는 유일한 방법은 무엇입니까?

서버에서 CentOS 5, Apache 2.2 및 PHP 5.2.17을 실행 중입니다.

+0

, 즉 매우 다른 것이 될 것입니다. 용어가 고정되었습니다. – deceze

+0

"기본이 아닌"기능이란 무엇입니까? 나머지 시스템 세부 사항 (OS 및 C)은 무엇입니까? – outis

+0

일반 cpanel 서버입니다. Centos 5, apache 2.2 등 – user962449

답변

2

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 
); 
+0

나는이 대답을 너무 좋아했다. "참고 : 내부적으로이 함수는 시스템의 C 라이브러리에서 제공하는 strptime() 함수를 호출합니다.이 함수는 여러 운영 체제에서 크게 다른 동작을 나타낼 수 있습니다." – nachito

+0

나는 그것을 작동시킬 수 없었다. 나는 centos에있다 – user962449

+2

"작동시키지 못했습니다"라고 말합니다. 정확히 어떻게 작동하지 않았습니까? – outis

4

더 현대적인 DateTime 클래스를 사용하십시오 (> = 5.3을 사용하는 한).

$unix = DateTime::createFromFormat('m/d/Y @ h:ia', '11/24/2011 @ 01:15pm') 
     ->getTimestamp(); 

CodePad.

+0

'치명적인 오류 : 정의되지 않은 메서드 호출 DateTime :: createFromFormat()' – user962449

+0

@ user962449 : 이전 PHP 버전 (5.3 이전)이있을 수 있습니다. 'strtotime()'에 맞게 문자열을 미리 처리 할 수 ​​있습니다. – alex

+0

좋은 대답 - 대답뿐 아니라 주석이 필요한 PHP 버전을 지적해야합니다. –

0

'@'를 공백으로 바꾸면 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 
+0

도 작동하지 않았다. $ y에는 가치가 없습니다. $ x와 $ z는 괜찮 았어. 죄송합니다. $ y는 값이 없으므로 $ z는'12-31-1969 @ 04:00 pm'입니다. – user962449

+0

게시하기 전에 웹 서버에서 실행했습니다. 내 PHP 버전을 확인하겠습니다. –

+0

동일한 버전 - 5.2.17을 실행 중입니다. –

0

대소 문자 구분 문제 http://php.net/manual/en/datetime.formats.php 수 있습니다. 아마도 $ x를 strtoupper()까지 실행 한 다음 str_replace('@', '', $x) (@가 빈 문자열로 바뀌는 것에 주목하십시오)을 시도한 다음 strtotime()을 시도하십시오. 희망이 도움이됩니다.

0
$search = array('/',',','@'); 
$replace = array('-','',''); 
echo strtotime(str_replace($search,$replace,'16/7/2013 @ 7:30AM')); 

이것은 strtotime에 허용되는 형식으로 변환하려는 문자열의 문자열 부분을 대체합니다. 배열로 대체 할 문자열 부분을 더 추가 할 수 있습니다.

또한 최신 PHP가 필요하지 않습니다.

출력 : 당신을 "유닉스"로 변환하려고하지 않는

1373952600
관련 문제