PHP konvertiert 2-stelliges Jahr in ein 4-stelliges Jahr

8

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 ...

%Vor%

Aber es kehrte 1969

zurück

Wie kann ich das beheben?

    
user2327201 10.06.2013, 18:24
quelle

11 Antworten

15
___ answer17030864 ___

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.

    
___ answer17030407 ___
%Vor%     
___ qstntxt ___

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 ...

%Vor%

Aber es kehrte 1969

zurück

Wie kann ich das beheben?

    
___ answer17030396 ___

Das Problem ist mit strtotime. Versuchen Sie dasselbe mit strtotime ("jetzt").

    
___ answer17030405 ___

Einfach die Zeichenfolge "20" manuell voranstellen:

%Vor%     
___ answer17030409 ___

Dies könnte doof sein, aber eine schnelle Lösung wäre:

%Vor%

Oder Sie können etwas wie folgt verwenden:

%Vor%     
___ qstnhdr ___ PHP konvertiert 2-stelliges Jahr in ein 4-stelliges Jahr ___ answer17030419 ___

Sie können ein Datumsobjekt in einem Format mit 70

erstellen

Ссылка

%Vor%     
___ answer17030425 ___

Verwenden Sie die Klasse 1970 , insbesondere %code% , dafür:

%Vor%     
___ answer23187615 ___

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%     
___ answer46725409 ___

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%     
___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ answer17030408 ​​___
%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.

    
___ answer47800176 ___

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.

    
___ tag123date ___ Ein Datum ist ein mehrdeutiges Zeitintervall, das sich normalerweise auf einen Tag, einen Monat und ein Jahr bezieht. ___
webbiedave 10.06.2013 18:27
quelle
10

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.

    
Chris Throup 10.06.2013 18:57
quelle
4
%Vor%     
Igor S. 10.06.2013 18:27
quelle
1

Das Problem ist mit strtotime. Versuchen Sie dasselbe mit strtotime ("jetzt").

    
JonnyS 10.06.2013 18:26
quelle
1

Einfach die Zeichenfolge "20" manuell voranstellen:

%Vor%     
IanPudney 10.06.2013 18:27
quelle
1

Dies könnte doof sein, aber eine schnelle Lösung wäre:

%Vor%

Oder Sie können etwas wie folgt verwenden:

%Vor%     
Praveen Kumar 10.06.2013 18:27
quelle
1

Sie können ein Datumsobjekt in einem Format mit date_create_from_format()

erstellen

Ссылка

%Vor%     
Schleis 10.06.2013 18:28
quelle
1

Verwenden Sie die Klasse DateTime , insbesondere DateTime::createFromFormat() , dafür:

%Vor%     
hek2mgl 10.06.2013 18:28
quelle
0

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%     
Jim Raymond 20.04.2014 21:10
quelle
0

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%     
julius patta 13.10.2017 08:12
quelle
0

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.

    
Mfoo 13.12.2017 18:49
quelle

Tags und Links