Ich habe Daten aus der Datenbank in einem 2-stelligen Jahr Format 13
Ich bin auf der Suche nach in 2013
Ich habe versucht den folgenden Code unten ...
Aber es kehrte 1969
zurückWie kann ich das beheben?
Eine wichtige Information, die Sie nicht angegeben haben, ist: Wie denken Sie, dass ein zweistelliges Jahr in ein vierstelliges Jahr umgewandelt werden sollte?
Ich glaube zum Beispiel, dass Sie glauben, der 01.01.13 ist 2013. Was ist mit 01/01/23? Ist das 2023? Oder 1923? Oder sogar 1623?
Die meisten Implementierungen wählen einen Zeitraum von 100 Jahren und nehmen an, dass sich die zweistelligen Zahlen auf ein Jahr innerhalb dieses Zeitraums beziehen.
Einfachstes Beispiel: Jahr liegt im Bereich 2000-2099.
%Vor%Was ist, wenn wir einen anderen Bereich möchten?
%Vor%Probieren Sie es aus. Dies verwendet die Modulo-Funktion (das Bit mit%), um den Offset von Ihrem Basisjahr zu berechnen.
Ich habe Daten aus der Datenbank in einem 2-stelligen Jahr Format 69
Ich bin auf der Suche nach in 2069
Ich habe versucht den folgenden Code unten ...
Aber es kehrte 1969
zurückWie kann ich das beheben?
Das Problem ist mit strtotime. Versuchen Sie dasselbe mit strtotime ("jetzt").
Einfach die Zeichenfolge "20" manuell voranstellen:
%Vor%Dies könnte doof sein, aber eine schnelle Lösung wäre:
%Vor%Oder Sie können etwas wie folgt verwenden:
%Vor% Sie können ein Datumsobjekt in einem Format mit 70
Ich bin nur ein Neuling Hack und ich weiß, dass dieser Code ziemlich lang ist. Ich bin über deine Frage gestolpert, als ich nach einer Lösung für mein Problem gesucht habe. Ich gebe Daten in ein HTML-Formular ein (zu faul, um das 4-stellige Jahr einzugeben) und schreibe dann in eine DB und ich (aus Gründen, die ich nicht langweilt) möchte das Datum in einem vierstelligen Jahresformat speichern. Genau die Rückseite Ihres Problems.
Das Formular gibt $ date (ich weiß, dass ich dieses Wort nicht verwenden sollte, aber ich habe) als 01/01/01 zurück. Ich bestimme das aktuelle Jahr ($ yn) und vergleiche es. Egal welches Jahr eingegeben wird, wenn das Datum dieses Jahrhundert ist, wird es 20XX. Aber wenn es weniger als 100 (dieses Jahrhundert) wie 89 ist, wird es 1989 herauskommen. Und es wird auch weiterhin funktionieren, wenn sich das Jahr ändert. Immer gut für 100 Jahre. Hoffe das hilft dir.
// breche $ date in zwei Strings
%Vor%// Die letzten beiden Ziffern des aktuellen Jahres erhalten
%Vor%// Jahrhundert bestimmen
%Vor%// Bringe beide Strings zurück in eins
%Vor%Ich hatte ähnliche Probleme beim Importieren von Excel (CSV) DOB-Feldern mit antiquiertem Datumsformat im amerikanischen Stil mit zweistelligen Jahreszahlen. Ich musste richtiges JJJJ-MM-TT in die DB schreiben. obwohl nicht perfekt, das ist was ich getan habe:
%Vor%%code% ergibt %code% . %code% ergibt %code% . Wenn Sie mit einer solchen Regel einverstanden sind, lassen Sie sie unverändert, andernfalls ordnen Sie Ihre eigenen Jahrhundertdaten entsprechend Ihrer eigenen Regel zu.
Wenn Sie sicher sind, dass das Jahr immer %code% etwas ist, dann funktioniert die erste Antwort, ansonsten gibt es wirklich keine Möglichkeit zu tun, was gefragt wird Punkt . Sie haben keine Ahnung, ob das Jahr vergangen, aktuell oder in Zukunft ist.
Zugegeben, es gibt nicht genug Informationen in der Frage, um festzustellen, ob diese Daten immer %code% sind, aber selbst dann wüssten Sie nicht, ob %code% %code% oder %code% ist. Es ist einfach nicht möglich.
Eine wichtige Information, die Sie nicht angegeben haben, ist: Wie denken Sie, dass ein zweistelliges Jahr in ein vierstelliges Jahr umgewandelt werden sollte?
Ich glaube zum Beispiel, dass Sie glauben, der 01.01.13 ist 2013. Was ist mit 01/01/23? Ist das 2023? Oder 1923? Oder sogar 1623?
Die meisten Implementierungen wählen einen Zeitraum von 100 Jahren und nehmen an, dass sich die zweistelligen Zahlen auf ein Jahr innerhalb dieses Zeitraums beziehen.
Einfachstes Beispiel: Jahr liegt im Bereich 2000-2099.
%Vor%Was ist, wenn wir einen anderen Bereich möchten?
%Vor%Probieren Sie es aus. Dies verwendet die Modulo-Funktion (das Bit mit%), um den Offset von Ihrem Basisjahr zu berechnen.
Dies könnte doof sein, aber eine schnelle Lösung wäre:
%Vor%Oder Sie können etwas wie folgt verwenden:
%Vor% Verwenden Sie die Klasse DateTime
, insbesondere DateTime::createFromFormat()
, dafür:
Ich bin nur ein Neuling Hack und ich weiß, dass dieser Code ziemlich lang ist. Ich bin über deine Frage gestolpert, als ich nach einer Lösung für mein Problem gesucht habe. Ich gebe Daten in ein HTML-Formular ein (zu faul, um das 4-stellige Jahr einzugeben) und schreibe dann in eine DB und ich (aus Gründen, die ich nicht langweilt) möchte das Datum in einem vierstelligen Jahresformat speichern. Genau die Rückseite Ihres Problems.
Das Formular gibt $ date (ich weiß, dass ich dieses Wort nicht verwenden sollte, aber ich habe) als 01/01/01 zurück. Ich bestimme das aktuelle Jahr ($ yn) und vergleiche es. Egal welches Jahr eingegeben wird, wenn das Datum dieses Jahrhundert ist, wird es 20XX. Aber wenn es weniger als 100 (dieses Jahrhundert) wie 89 ist, wird es 1989 herauskommen. Und es wird auch weiterhin funktionieren, wenn sich das Jahr ändert. Immer gut für 100 Jahre. Hoffe das hilft dir.
// breche $ date in zwei Strings
%Vor%// Die letzten beiden Ziffern des aktuellen Jahres erhalten
%Vor%// Jahrhundert bestimmen
%Vor%// Bringe beide Strings zurück in eins
%Vor%Ich hatte ähnliche Probleme beim Importieren von Excel (CSV) DOB-Feldern mit antiquiertem Datumsformat im amerikanischen Stil mit zweistelligen Jahreszahlen. Ich musste richtiges JJJJ-MM-TT in die DB schreiben. obwohl nicht perfekt, das ist was ich getan habe:
%Vor% Wenn Sie sicher sind, dass das Jahr immer 20
etwas ist, dann funktioniert die erste Antwort, ansonsten gibt es wirklich keine Möglichkeit zu tun, was gefragt wird Punkt . Sie haben keine Ahnung, ob das Jahr vergangen, aktuell oder in Zukunft ist.
Zugegeben, es gibt nicht genug Informationen in der Frage, um festzustellen, ob diese Daten immer <= now
sind, aber selbst dann wüssten Sie nicht, ob 01
1901
oder 2001
ist. Es ist einfach nicht möglich.