2010-04-23 5 views

Antwort

21

Versuchen

echo date('n', strtotime('November')); // returns 11 

Wenn Sie dies oft zu tun haben, könnten Sie erwägen ein Array verwenden, die diese Werte fest einprogrammiert hat:

$months = array(1 => 'January', 2 => 'February', 3 => 'March', 4 => 'April', 
       5 => 'May',  6 => 'June',  7 => 'July', 8 => 'August', 
       9 => 'September', 10 => 'October', 11 => 'November', 
       12 => 'December'); 

Kann tun es auch andersherum Verwenden Sie jedoch die Namen für die Schlüssel und Zahlen für Werte.

mit den Namen für Werte, die Sie tun

echo array_search('November', $months); // returns 11 

und mit Namen für Schlüssel, die Sie tun

echo $months['November']; // returns 11 

Ich finde die Zahlen für die Tasten etwas besser im Allgemeinen verwenden, obwohl für Ihre UseCase die Namen für Tasten Ansatz ist wahrscheinlich komfortabler. Bei nur 12 Werten im Array sollte zwischen den Array-Ansätzen kein großer Unterschied bestehen.

Ein schneller Benchmark bemerkte einen Unterschied von 0,000003s vs 0,000002s, während die Zeitumwandlung 0,000060s auf meinem Computer dauert (lesen: kann auf anderen Computer abweichen).

+2

Für diejenigen, die mit Objekten spielen bevorzugen, PHP 5.3 bringt uns 'Datetime :: createFromFormat ('F', $ month) - > Format ('n') ' – salathe

+1

warum nicht die Namen als Schlüssel des Arrays verwenden, die Zahlen als Werte haben? Dann wäre es nur eine Frage der Verwendung von echo $ Monate ['November'] '* (und wäre wahrscheinlich schneller als die Verwendung von' array_search' - ok, ich gebe zu, ist nicht viel ausmacht ^^) * –

+0

@ Pascal stimmte zu. War mehr wie eine persönliche Vorliebe als alles andere. Aktualisiert. – Gordon

7

Was strtotime() über die Verwendung von November zu einem Zeitstempel zu konvertieren, und dann die date() Funktion mit dem n Format die entsprechende Nummer zu erhalten:

$ts = strtotime('november'); 
echo date('n', $ts); 

gibt die folgende Ausgabe:

11 


Und nur zum Spaß, ein Teil des Codes wie das folgende:

$months = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December',); 
foreach ($months as $m) { 
    $ts = strtotime($m); 
    echo $m . ' : ' . date('n', $ts) . '<br />'; 
} 

wird Ihnen die Liste aller Monat mit den entsprechenden Zahlen - zeigt, dass diese Idee für alle 12 Monate arbeiten, und nicht nur November ;-)

5

Ich kann nicht vorstellen, das ist mehr effizient, aber es funktioniert

$t = strtotime("March"); 
echo date('n',$t); 
1

Das einzige, was ich aus der Spitze von meinem Kopf denken kann, ist jede Zeichenfolge als eine Variable zu setzen und es = die entsprechende Zahl zu machen.Aber dann wieder bin ich ziemlich neu, so dass ich bin gespannt, wie gut zu sehen, ob es irgendwelche einfachere Wege (=

1
$months = array('January', 'February', 'March', 'April', 'May', 'June', 
       'July', 'August', 'September', 'October', 'November', 'December',); 
foreach ($months as $m) { 
    echo $m."=".date('n', strtotime($m))."<br>"; 
}; 
0

Je nach Szenario wahrscheinlich die effizienteste Lösung dieses Problems wäre ein assoziatives zu schaffen Array wie:

$months = array("january" => 1, "february" => 2, "march" => 3, "april" => 4, "may" => 5, "june" => 6, "july" => 7, "august" => 8, "september" => 9, "october" => 10, "november" => 11, "december" => 12); 

Und dann Ihre Lookups sind super einfach:

$month = "Nobember"; 
$monthNumber = $months[strtolower($month)]; 
+2

Sie sollten wahrscheinlich prüfen, ob der Monat nicht existiert, wie Nobember. – OIS

Verwandte Themen