我有這樣的字符串:格式化字符串轉換成合適的UTC偏移
-4:00
3:15
+8:30
我需要進行格式化爲UTC偏移像值:
-0400
+0315
+0815
我如何轉換樣本串到最後的字符串?我知道它可能使用了一些組合str_replace
和sprintf
,但我無法解決它。
謝謝!
我有這樣的字符串:格式化字符串轉換成合適的UTC偏移
-4:00
3:15
+8:30
我需要進行格式化爲UTC偏移像值:
-0400
+0315
+0815
我如何轉換樣本串到最後的字符串?我知道它可能使用了一些組合str_replace
和sprintf
,但我無法解決它。
謝謝!
在這裏的三個步驟是:
$offset = preg_replace('/:/','',$offset);
$offset = preg_replace('/\b(?=\d{3}$)/', '0', $offset);
$offset = preg_replace('/^(?=\d)/m', '+', $offset);
可以刪除m
標誌的第二正則表達式,如果你只有經過一次一個偏移。
首先,檢查輸入字符串是否匹配。如果是這樣,則從結果中刪除整個匹配的字符串,如果只有兩個部分,則缺少前導符號。在這種情況下,在開頭添加一個加號,並將小時填入長度爲2.最後將該數組轉換爲字符串。
foreach (array('-1:50','1:50','+1:50','-12:00','12:00','+12:00') as $input) {
echo $input . ': ';
if (preg_match('/^([-+])?([1-9][0-9]?):([0-9]{2})$/DX', $input, $asMatch) === 1) {
unset($asMatch[0]);
if ($asMatch[1] === '') {
array_unshift($asMatch, '+');
}
$asMatch[2] = str_pad($asMatch[2], 2, '0', STR_PAD_LEFT);
echo implode('', $asMatch);
}
echo "\n";
}
如果你仍然在尋找一個簡單的解決方案:'$ offset = vsprintf('%+ 03d:%02d',sscanf($ offset,'%d:%d'));' - [完整答案和演示(http://stackoverflow.com/questions/7072350/formatting-string-into-appropriate-utc-offset/7072627#7072627)。 – hakre