2011-01-09 41 views
36

que me gustaría saber si hay una carta de formato para PHP de date() que me permite imprimir minutos sin ceros a la izquierda, o si tengo que probar manualmente y eliminar líder ceros?PHP date(): minutos sin ceros a la izquierda

+0

¿Puedo preguntar por qué demonios no hay minutos sin ceros ??? – Jackt

Respuesta

77

Uso:

$minutes = intval(date('i')); 
+1

¡Comportamiento loco de PHP! Trata el int '09' como un número octal debido al cero inicial - que evaluará a' 0' ya que '9' no es un número octal válido. Pero trata la cadena '09' como el entero decimal' 9'. Adiós comportamiento esperado! :) – hek2mgl

+0

Es mejor usar '(int) date ('i');' en lugar de 'intval()'. Se supone que es mucho más rápido. – KoviNET

3

no se parece a ella, pero que podría ser algo así como ...

echo date('g:') . ltrim(date('i'), '0'); 

alternativa, puede emitir la segunda llamada a date() con (int).

+0

¡Impresionante! Me alegra que sea tan simple. Gracias. – Bojangles

6

De acuerdo con la PHP Documentation, la función date() no tiene un marcador de posición para minutos y sin ceros a la izquierda.

Sin embargo, puede obtener esa información simplemente multiplicando las fechas, con un cero inicial, por 1, convirtiéndolo en un número entero.

$minutesWithoutZero = 1* date('i'); 
+1

Eso funcionará, pero es un poco más complicado que simplemente '(int)'. – alex

+0

Es cierto. Solo uso malos hábitos viejos recogidos en mis días de javascript. –

+0

+1 para la nueva solución Lucanos. Gracias. He ido con la respuesta de 'Hippo' debido a su simplicidad y no-hackiness ;-P – Bojangles

3

Esto también funciona

$timestamp = time(); //Or Your timestamp 
echo (int)date('i',$timestamp); 
+3

No hay necesidad de agregar' time() 'allí. – alex

+2

@alex, en realidad estaba tratando de mostrar dónde podía agregar su propia marca de tiempo – Starx

0

O en MySQL simplemente se multiplica por 1, como por ejemplo:

select f1, ..., date_format(fldTime , '%i') * 1 as myTime, ..., ... 
+1

No pedí una solución MySQL, pero gracias por la alternativa, lo tendré en cuenta para el formato relacionado con MySQL. – Bojangles

5

He intentado encontrar esto por segundo, así, renunció a la búsqueda y acaba de emitir el resultado como un int como este:

echo (int)date("s"); 

Eso eliminará los principales cero de una manera rápida y eficiente.

1
$current_date = Date("n-j-Y"); 
echo $current_date; 

// Result m-d-yy 

9-10-2012 
+1

el OP está buscando minutos, no un formato de fecha estándar –

8

Para veces con más información que sólo unos minutos:

ltrim() - Elimina espacios en blanco (u otros caracteres) desde el principio de una cadena

ltrim(date('i:s'), 0); 

devuelve:

8:24 
+2

esto no funciona en tiempos inferiores a 1 minuto ... por ejemplo: 00:24 daría como resultado: 24 –

+0

Encaja perfectamente en mi función (..'elseif ($ duración <= 3599 && $ duración> 59) {'..) –

2

Uso este formato si necesito un formato XXmXXs:

//Trim leading 0's and the 'm' if no minutes 
ltrim(ltrim(gmdate("i\ms\s", $seconds), '0'), 'm'); 

Esta salida voluntad la siguiente:

12m34s 
1m23s 
12s 
+1

¡Impresionante! Aún mejor que la solución @ScottA. Este es mi código (también con horas) 'print ltrim (gmdate (" H \ hi \ ms \ s ", $ duration), '0mh');' –

2

acabo de hacer esta solución una línea

$ min = intval (fecha ('i', strtotime (fecha $)));

El uso del método ltrim puede eliminar todos los ceros a la izquierda. Por ejemplo, si '00' min. En este caso, esto eliminará todos los ceros y le dará un resultado vacío.

0

Mi solución:

function seconds2string($seconds) { 
     if ($seconds == 0) { 
      return '-'; 
     } 
     if ($seconds < 60) { 
      return date('0:s', $seconds); 
     } 
     if ($seconds < 3600) { 
      return ltrim(date('i:s', $seconds), 0); 
     } 
     return date('G:i:s', $seconds); 
} 

Esta es la salida:

0 seconds:   - 
10 seconds:  0:10 
90 seconds:  1:30 
301 seconds:  5:01 
1804 seconds:  30:04 
3601 seconds: 1:00:01 
0

Un polvo rápido de mí. Dime lo que piensas:

<?php function _wo_leading_zero($n) { 
    if(!isset($n[1])) return $n; 

    if(strpos($n, '.') !== false) { 
    $np = explode('.', $n); $nd = '.'; 
    } 
    if(strpos($n, ',') !== false) { 
    if(isset($np)) return false; 
    $np = explode(',', $n); $nd = ','; 
    } 
    if(isset($np) && count($np) > 2) return false; 
    $n = isset($np) ? $np[0] : $n;  

    $nn = ltrim($n, '0'); 
    if($nn == '') $nn = '0'; 
    return $nn.(isset($nd) ? $nd : '').(isset($np[1]) ? $np[1] : ''); 
} 

echo '0 => '._wo_leading_zero('0').'<br/>'; // returns 0 
echo '00 => '._wo_leading_zero('00').'<br/>'; // returns 0 
echo '05 => '._wo_leading_zero('05').'<br/>'; // returns 5 
echo '0009 => '._wo_leading_zero('0009').'<br/>'; //returns 9 
echo '01 => '._wo_leading_zero('01').'<br/>'; //returns 1 
echo '0000005567 => '._wo_leading_zero('0000005567').'<br/>'; //returns 5567 
echo '000.5345453 => '._wo_leading_zero('000.5345453').'<br/>'; //returns 0.5345453 
echo '000.5345453.2434 => '._wo_leading_zero('000.5345453.2434').'<br/>'; //returns false 
echo '000.534,2434 => '._wo_leading_zero('000.534,2434').'<br/>'; //returns false 

echo date('m').' => '._wo_leading_zero(date('m')).'<br/>'; 
echo date('s').' => '._wo_leading_zero(date('s')).'<br/>'; ?> 
Cuestiones relacionadas