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!!
Top comments (0)