2016-10-28 2 views
1

에서 문자 전에이 날짜/시간 문자열 나는 ​​Z 전에 3 자리 숫자를 제거 할 수 있도록하고 싶습니다트림 문자열 PHP

$dateTime = '2016-11-01T16:00:59:999000Z'; 

에게 있습니다. 정말 어떻게하는지 모르겠습니다.

substr($dateTime, 0, -3); 

을하지만이 Z 전에 아닌 문자열의 끝에서 트림하는 방법을 알아낼 수 :이 재 작업을 시도했다.

+0

이 코드가 반복되는 횟수는 확실하지 않지만 http://stackoverflow.com/a/40305677/2191572가 가장 느리며 http://stackoverflow.com/a/40305493/2191572가 이어지고 http://stackoverflow.com/a/40305555/2191572가 가장 빠릅니다. PHP 5.6.20의 100k 반복은 .173 초, .039 초 및 .025 초를 제공합니다. – MonkeyZeus

답변

2
preg_replace("/\d{3}(Z)($)?/", "$1$2", "2016-11-01T16:00:59:999000Z"); 
// Result: 2016-11-01T16:00:59:999Z 

이 경우에도 일을해야 Z은 문자열의 끝에 없습니다.

1

할 수 있습니다 두 번 만 subtr() 문자열 당신이 원치 않는 000 항상 같은 위치에려고하고 있다는 것을 알고있는 경우 :

<?php 
$date = '2016-11-01T16:00:59:999000Z'; 

echo substr($date, 0, -4).substr($date, -1); // this produces 2016-11-01T16:00:59:999Z 

// substr($date, 0, -4) produces 2016-11-01T16:00:59:999 
// the period "." is the concatenation operator 
// substr($date, -1) produces Z 
0
$dateTime = '2016-11-01T16:00:59:999000Z'; 

$result = substr($dateTime, 0, 23).$dateTime[strlen($dateTime)-1]; 
+1

이 코드 단편은 질문을 해결할 수 있지만, [설명 포함] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)은 게시물의 품질을 향상시키는 데 정말로 도움이됩니다. 앞으로 독자의 질문에 답하고 있으며 코드 제안의 이유를 알지 못할 수도 있습니다. – andreas

1
substr_replace($dateTime, '', -4, 3); 
+0

나는 내 자신의 대답보다이 점이 더 좋지만 설명을하지 않으면 upvote 할 수 없다. – MonkeyZeus

+0

:) 요구 사항은 Z. substr_replace가 먼저 해당 하위 문자열을 찾아 빈 문자열로 대체하기 전에 3 자리를 제거하는 것이 었습니다. 참조 용 http://php.net/manual/en/function.substr-replace.php –

+0

예, 예 알고있다; 나는 당신의 코드를 읽을 수 있습니다. OP가 쉽게 읽고 이해할 수 있도록 코드에 주석을 추가하십시오. 좋은 의견의 예를 보려면 내 대답을 참조하십시오. – MonkeyZeus