Wie bekomme ich den Unterschied (in Sekunden) zwischen 2 Daten ohne Verwendung: Strtotime, das Zend -Framework oder ein Birnenpaket?

StackOverflow https://stackoverflow.com/questions/2068033

  •  20-09-2019
  •  | 
  •  

Frage

Wie der Titel sagt, möchte ich den Unterschied (in Sekunden) zwischen 2 (insbesondere zwischen jetzt und einem Datum in der Vergangenheit) datiert, ohne zu verwenden: Strtotime, das Zend -Framework oder ein BEAR -Paket.

Ich möchte nicht auf die Details meines Grundes eingehen, aber das Kern ist, dass ich mit sehr alten Daten arbeite (und ich meine alt, ich spreche vor 0 n. Chr.).

Es wird bevorzugt, dass das zurückgegebene Ergebnis auf die zweite des angegebenen textuellen Zeitstempels sehr genau ist. Das Format zum Aufrufen der Funktion sollte ähnlich sein wie:

$bar = foo("YYYY-MM-DD HH:MM:SS", "AD"); // Where AD is Anno Domini 
$baz = foo("YYYY-MM-DD HH:MM:SS", "BC"); // Where BC is Before Christ

Die erste Person, die Arbeiten anbietet, die Funktionen finden:

  • Hohe Lesbarkeit
  • Keine Magie (ternäre Operatoren usw.)

Wird ihre Antwort aufgewählt und akzeptiert. Ihr Name wird im Header der Quelldatei gutgeschrieben, der ihren Code verwendet.

Edit (Re: Ruhm):

Jemand sagte, dass ein Name im Kopfzeile schlecht aussieht und herausgearbeitet werden kann. Ich spreche über den Kopfzeilen der Quelldatei, die die gewünschte Funktion verwendet. Hier geht es nicht um "Ruhm". Kredit sollte gegeben werden, wo Kredit fällig ist, und ich muss nicht darüber lügen, wer eine Arbeit verfasst hat.

Edit (Re: Richtigkeit):

Kein anderer Grund, außer ich möchte mit dem "Buchstaben der Nachricht" so gut wie möglich bleiben.

Edit (Re: Magie):

Magie ist verschiedene Dinge für verschiedene Menschen. In Bezug auf den ternären Betreiber respektiere bitte meine Meinung, wenn ich deine respektiere. Vielen Dank.

Bearbeiten (Re: Alte Daten und eine Sekunde Genauigkeit):

Als Student der Geschichte macht es für mich Sinn. Der Wunsch nach "eine Sekunde Genauigkeit" ist kein absolutes. Perfektion ist zwar erreichbar, aber nicht erforderlich.

War es hilfreich?

Lösung

Ich würde vorschlagen, jede DateTime in Teile (Jahr, Monat, Datum, Stunden, Minuten, Sekunden) aufzuteilen. Machen Sie dann mit jedem Teil eine grundlegende Summe der meisten abzüglich weniger neuer (denken Sie daran, dass ein BC -Datum effektiv eine negative Zahl ist).

Sie werden es nie absolut korrekt bekommen. Sie müssen über die Jahre in Betracht gezogen werden und ob ein Jahrhundert Jahr ein Schaltjahr ist, der Wechsel zwischen Gregorianischen/julianischen Daten usw.

Außerdem würde ich gerne Ihre Argumentation für die Einschränkungen und die hohe Genauigkeitsanforderung kennen!

Andere Tipps

Für all diese Angelegenheiten siehe Kalenderberechnungen (Google dafür).

Oh, und es gab keine 0 -negative Jahr, der Kalender ging von 1 v. Chr. Nach 1AD, oder eher, wir moderne Westler definieren den Kalender auf diese Weise, zu dieser Zeit verwendete die meisten Welt andere Systeme.

Oder telefonieren an Online-Taschenrechner wie z. Dieses hier Und sparen Sie sich viel Zeit.

Einige Sprachen und Datenbanken datieren arithmetisch, andere nicht. Wenn Sie Ihre Daten in einer Datenbank speichern, versuchen Sie es mit Postgres:

pg=> SELECT now() - 'January 8, 52 BC'::DATE;
-----------------------------
 754835 days 20:27:31.223035

Wenn Sie kein DB verwenden, wird es etwas problematischer. Die Arithmetik von PHP ist ... nun, ich würde lieber nicht darüber sprechen. Python's ist sehr gut, aber es beginnt im Jahr 1BC.

Möglicherweise müssen Sie sich selbst rollen ...

Warum subtrahieren Sie die Zeitstempel nicht?

mktime(16,59,0,8,7,2001) - mktime(16,59,0,8,7,2000) = Sekunden zwischen ihnen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top