2016-07-26 8 views
0

ich aus meiner Datenbank Zeit wie hh Empfang: mm: ss, und in javascript Ich mag würde die Zeit wie hh setzen: mm dies ist mein CodeJavascript Zahl wie Zeit regex Format

var time = '10:01:30'; 
 
console.log(time); 
 
var res = formatTime(time); 
 
console.log(res); 
 

 
function formatTime(time) { 
 
    var result = false, m; 
 
    var re = /^\s*([01]?\d|2[0-3]):?([0-5]\d)\s*$/; 
 
    if ((m = time.match(re))) { 
 
    result = (m[1].length === 2 ? "" : "0") + m[1] + ":" + m[2]; 
 
    console.log(result); 
 
    } 
 
}

Die Funktion funktioniert nicht gut, da ich "falsch", keine Hilfe erhalten?

Dank

+1

Machte dieses eine [MCVE] für Sie. – Jamiec

+1

Keine Notwendigkeit für Regex hier überhaupt sehen. Erwägen Sie, mit einer tatsächlichen Date-Variablen zu arbeiten.Dies hat den Nebeneffekt, dass auch der Eingabewert überprüft wird, da das Data-Objekt nicht erfolgreich erstellt werden kann, wenn ein gültiges Format nicht übergeben wird. –

Antwort

2

Darf ich etwas in der Frage bin fehlen, aber wenn man einfach den hh:mm Teil von hh:mm:ss extrahieren möchten, dann sollte diese Arbeit:

// var time = "hh:mm:ss"; 
 
var time = "10:01:30"; 
 
var splitTime = time.trim().split(":"); // trim to remove any leading and trailing spaces 
 
var formattedTime = splitTime[0] +":"+ splitTime[1]; 
 
console.log(formattedTime);

+0

Vergessen Sie nicht, dass ihre Regex Whitespace um den Eingang erlaubt, möchten Sie Ihre Ergebnisse trimmen() ' – Jamiec

+0

@Jamiec Vielen Dank. Aber ich habe hier direkt die Zeichenfolge "10:01:30" verwendet. In diesem Zusammenhang sollte es gut funktionieren. Nein? –

+0

aber wenn die Eingabe '' 10:01:30 "' war (wie die Regex impliziert, ist möglich), dann haben Sie diese zusätzlichen Leerzeichen in Ihrer Variable 'formatedTime'. – Jamiec

1

Könnten Sie nicht einfach Folgendes tun ?:

function formatTime(time) { 
     var array = time.split(':'); 
     return array[0] + ':' + array[1]; 
    } 
1

Die andere Antwort (mit split) ist zweifellos der einfachere Weg, dies zu tun. Wenn Sie sich jedoch wundern, warum Ihre Regex nicht übereinstimmte, liegt das daran, dass Ihr regulärer Ausdruck nach dem ersten (hh) Block und dann nach dem zweiten (mm) Block gesucht hat, aber danach Whitespace erwartet hat bis zum Ende der Zeile - keine Berücksichtigung für den ss Teil.

Ich änderte dies ziemlich schwer, um alles nach dem mm Teil bis zum Ende der Zeile zu erlauben. siehe unten.

Auch, wenn Sie sich fragen, warum Ihre formatTime Funktion undefined gibt seine weil Sie vergessen haben, zu return result

var time = '10:01:30'; 
 
console.log(time); 
 
var res = formatTime(time); 
 
console.log(res); 
 

 
function formatTime(time) { 
 
    var result = false, m; 
 
    var re = /^\s*([01]?\d|2[0-3]):?([0-5]\d).*$/; 
 
    
 
    if ((m = time.match(re))) { 
 
    result = (m[1].length === 2 ? "" : "0") + m[1] + ":" + m[2]; 
 
    console.log(result); 
 
    } 
 
    return result; 
 
}

+0

Danke euch allen .... Ich habe Jamiec Beispiel folgen. Funktioniert jetzt – gmc1972

0

Ich würde mit nativer Date-Objekt arbeiten, um Ihre Formatierung zu tun. Dies wird ein paar Dinge für Sie tun:

  • Überprüfen Sie automatisch den Zeitwert, der eingegeben wird. Keine Notwendigkeit für Regex, dies zu tun. Entweder ist die Eingabezeichenfolge gültig und die Funktion funktioniert, oder sie ist ungültig und die Funktion gibt NaN zurück.
  • Geben Sie Flexibilität, wie Sie mit dem Wert arbeiten. Sie müssen Zeitzonen konvertieren, in Unix-Zeitstempel konvertieren, usw.? Diese Methoden sind in das Date-Objekt integriert.
  • Bietet Flexibilität bei den Eingabewerten. Sie könnten möglicherweise andere Zeichenfolgeneingabetypen bei Bedarf verwenden, sofern sie die Instanziierung eines gültigen Date-Objekts ermöglichen. Sie müssen Regex ändern, um mehrere Eingabearten oder ähnliches zu ermöglichen.

Mit diesem Ansatz könnte Beispielcode wie folgt aussehen:

function stripSecondsFromTimeString(time) { 
    // create data object representing current date 
    // the date is not really important here other than allowing 
    // you to format a fully valid Date object with your time fragment 
    var day = new Date(); 
    var dateInput = day.toDateString() + ' ' + time; 
    var date = new Date(dateInput); 

    // validate we were able to get useful Date object 
    if(isNaN(date.getHours())) { 
     return NaN; 
    } 

    // log out some values so you can see how you might more fully work with Date object 
    console.log(date.toString()); 
    console.log(date.getDate()); 
    console.log(date.getHours()); 
    console.log(date.getMinutes()); 

    // prepare to return string 
    var hours = '' + date.getHours(); 
    if(hours.length === 1) { 
     hours = '0' + hours; 
    } 
    var minutes = '' + date.getMinutes(); 
    if(minutes.length === 1) { 
     minutes = '0' + minutes; 
    } 
    return hours + ':' + minutes; 
} 

// Usage examples 

// your input time fragment 
var inputTime = '10:01:30'; 
var formattedTime = stripSecondsFromTimeString(inputTime); 
console.log(formattedTime); 

// example failure case 
var invalidTime = 'foo'; 
console.log(stripSecondsFromTimeString(invalidTime));