Вот еще один, теперь вариант на @ kwarnke's:
std::vector< int > v{ };
v.push_back( 42 );
auto guard_handler =
[ & v ] ( nullptr_t ptr )
{
v.pop_back( );
};
std::shared_ptr< decltype( guard_handler ) > guard( nullptr , std::move( guard_handler ) );
Не попадайтесь в ловушку, используя для этого функции даты! У вас здесь временной интервал, а не дата. Наивный подход - сделать что-то вроде этого:
date("H:i:s.u", $milliseconds / 1000)
, но поскольку функция даты используется для (ах!) Дат, она не обрабатывает время так, как вы хотели бы в этой ситуации - для этого нужны часовые пояса и переход на летнее время и т. д., во внимание при форматировании даты / времени.
Вместо этого вы, вероятно, захотите просто выполнить несколько простых вычислений:
$input = 70135;
$uSec = $input % 1000;
$input = floor($input / 1000);
$seconds = $input % 60;
$input = floor($input / 60);
$minutes = $input % 60;
$input = floor($input / 60);
// and so on, for as long as you require.
Если вы используете PHP 5.3, вы можете использовать объект DateInterval
:
list($seconds, $millis) = explode('.', $milliseconds / 1000);
$range = new DateInterval("PT{$seconds}S");
echo $range->format('%H:%I:%S') . ':' . str_pad($millis, 3, '0', STR_PAD_LEFT);
зачем возиться с date ()
и форматированием, если можно просто использовать математику?
if $ ms
- ваше количество миллисекунд
echo floor($ms/60000).':'.floor(($ms%60000)/1000).':'.str_pad(floor($ms%1000),3,'0', STR_PAD_LEFT);
Я считаю, что в PHP нет встроенной функции для форматирования миллисекунд, вы нужно использовать математику.
Попробуйте эту функцию, чтобы отобразить количество миллисекунд, как вам нравится:
<?php
function udate($format, $utimestamp = null)
{
if (is_null($utimestamp)) {
$utimestamp = microtime(true);
}
$timestamp = floor($utimestamp);
$milliseconds = round(($utimestamp - $timestamp) * 1000000);
return date(preg_replace('`(?<!\\\\)u`', sprintf("%06u", $milliseconds), $format), $timestamp);
}
echo udate('H:i:s.u'); // 19:40:56.78128
echo udate('H:i:s.u', 654532123.04546); // 16:28:43.045460
?>
Как упоминалось в руководстве:
u Микросекунды (добавлено в PHP 5.2.2) Пример: 654321
У нас есть параметр 'u' для функции date ()
Пример:
if(($u/60) >= 60)
{
$u = mktime(0,($u / 360));
}
date('H:i:s',$u);