Dodałem kilka rzeczy jako poprawkę do zaakceptowanej odpowiedzi @thebreiflabb, aby dopasować ją do mojego przypadku użycia i pomyślałem, że bym się nią podzielił.
jeśli wyrażenie regularne zostanie zmienione na timeReg = /(\d+)[\.|:](\d+)\s?(\w+)/;
, , zajmie się kilkoma innymi typowymi przypadkami.
mianowicie:
- stosując okrężnicy zamiast miejsca dziesiętnego pomiędzy godzin i minut
- pozwalających AM/PM, aby bezpośrednio po raz bez odstępu
również ustawienie sekund 0 (ponieważ był to mój główny przypadek użycia)
kod wynikowy będzie:
var test, parts, hours, minutes, date,
d = (new Date()).getTime(),
tests = ['01.25 PM', '01:25pm', '1:25 PM', '11.35 PM', '12.45 PM', '01.25 AM', '11.35 AM', '12.45 AM'],
i = tests.length,
timeReg = /(\d+)[\.|:](\d+)\s?(\w+)/;
for(; i-- > 0;) {
test = tests[i];
parts = test.match(timeReg);
hours = /am/i.test(parts[3]) ?
function(am) {return am < 12 ? am : 0}(parseInt(parts[1], 10)) :
function(pm) {return pm < 12 ? pm + 12 : 12}(parseInt(parts[1], 10));
minutes = parseInt(parts[2], 10);
date = new Date(d);
date.setHours(hours);
date.setMinutes(minutes);
date.setSeconds(0);
console.log(test + ' => ' + date);
}
Jeśli czas jest między 12.00 i 12,59 PM wciąż dodaje 12 godzin do czasu, co sprawia, że czas 12. ** AM – jaisonDavis
@jaisonDavis Masz rację, dziękuję, że go złapałeś, sam nie używam formatu 12-godzinnego.Uzupełniłem oryginalną odpowiedź, która zajmuje się tymi przypadkami. I na pewno zapamiętam 12.XX, kiedy będę pracował z 12-godzinnym formatem w przyszłości :-) – thebreiflabb
To naprawdę mi pomogło, ty – Paulj