Resolvendo problemas no HackerRank: Convertendo o tempo!
Tags: javascript, beginners
Published: 2023-02-06 10:58:43

Saudações. Esse é nosso 9º problema, e hoje veremos como fazer a conversão correta de horas, com números em formato string. No exercício nos é passado algumas regras a serem seguidas para que sua conclusão seja correta, vejamos:

**Time conversion -**

- Se a hora for AM, não mudar nada
- Caso a hora seja 12 e passe do horário padrão, mudar para PM
- Se a hora for PM, adicionar +12 a contagem
- Caso a hora seja PM e valor seja 12!, manter do jeito comum(não existe 24 horas e 7 minutos no relógio).


Sabendo assim todas as regras do exercício, temos que saber agora sobre um molde. Com o que se foi passado antes, o exercício nos pede o seguinte resultado:

```
//fazer isso = 7:34:18PM

// virar isso = 19:34:18
```
 
Com todas as exigências postas,façamos o que se pede:

```
function timeConversion(s) {
    // Write your code here
    const time = s.slice(-2);
    const [hour,minute,second] = s.slice(0,-2).split(":");
    
    if (time === "AM" && hour === "12"){
      return `00:${minute}:${second}`
    }
    if (time === "AM"){
      return `${hour}:${minute}:${second}`
    }
    if (time === "PM" && hour === "12"){
      return `12:${minute}:${second}`
    }
    if (time === "PM"){
      return `${Number(hour)+ 12}:${minute}:${second}`
    }
}
```
A função timeConversi~ons guarda os parâmetros string em (s),após isso declaramos uma const `time` que pegará os valores guardados no parâmetro da função (s) e usará um método para pegar os últimos dois caracteres, chamado .slice(). O slice extrai uma parte de uma string e a retorna como uma nova string, sem modificar a string original.

Feito isso declaramos também as variáveis `hour`, `minute` e `second`, onde o `slice` pegará os valores de 0(que seria o ínico da string, visto que todo início não é 1, mas 0) parando em -2 que seria onde estaria escrito PM.

Também foi se dado um split para que de maneira lógica, o código coloca em linhas ordenadas. Com isso ele será responsável por transformar: 73418PM, em 7:34:18PM.

Com isso, se o `time` for igual a AM e hora igual a 12, devemos fazer a conversão e retornar o valor em 00, por exemplo: 00:01:19.

Se o `time` for igual a AM no contexto padrão, retornar os valores normais.

Se o `time` for igual a PM e  hora igual a 12, devemos mudar a hora para 12.

Se for em outra situação além dessa acrescentaremos + 12 para o horário. Vale destacar essa parte do código: return `${Number(hour)+ 12}:${minute}:${second}`. Caso deixassemos o hour solto, ele não iria funcionar pois ele é uma string, não um valor. Com isso,se `${ hour + 12}:${minute}:${second}` fosse assim, o resultado seria 1212:01:17 ou algo assim. Por isso fizemos `${Number(hour)+ 12}:${minute}:${second}`, utilizando o Number,que é um construtor que trasformará ele em horas.

O resultado de todo esse procedimento será:

```
07:05:45PM

19:05:45
```

Temos também dessa vez, uma resolução alternativa. Nesse caso o código é bem menor, mas que funciona do mesmo modo.

```
function timeConversion(s) {
let hour = s.substring(0,2)
    let minuteSecond = s.substring(3,8)
    let ampm = s.substring(s.length - 2)
    
    if(ampm === "PM" && parseInt(hour) < 12){
        hour = parseInt(hour) + 12
    }else if(ampm === "AM" && hour === '12'){
        hour = "00"
    }
    return hour+':'+minuteSecond
}
```

Com isso,finalizamos mais um desafio. Te aguardo no próximo _Resolvendo problemas no HackerRank_!!