Come posso ottenere la differenza (in secondi) tra 2 date senza usare: Strtotime, Zend Framework o un pacchetto di pera?

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

  •  20-09-2019
  •  | 
  •  

Domanda

Come afferma il titolo, voglio ottenere la differenza (in secondi) tra 2 (in particolare tra oggi e una data in passato) senza usare: strtotime, il framework Zend o un pacchetto di pera.

Non voglio entrare nei dettagli della mia ragione, ma l'essenza è che sto lavorando con date molto vecchie (e intendo vecchio, sto parlando prima dello 0 d.C.).

Si preferisce che il risultato restituito sia molto accurato al secondo del timestamp testuale indicato. Il formato da chiamare la funzione dovrebbe essere simile a:

$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

La prima persona che offre un funzionamento che caratterizza:

  • Elevata leggibilità
  • Nessuna magia (operatori ternari, ecc.)

Avrà la loro risposta sempre votata e accettata. Il loro nome sarà accreditato nell'intestazione del file di origine che utilizza il loro codice.

EDIT (Re: Fame):

Qualcuno ha detto che avere un nome accreditato nell'intestazione sembra male e può essere modificato. Sto parlando dell'intestazione del file di origine che utilizza la funzione che desidero. Non si tratta di "fama". Il credito dovrebbe essere dato dove il credito è dovuto e non ho bisogno di mentire su chi ha scritto un'opera.

EDIT (RE: Accuratezza):

Nessun motivo diverso da quello che voglio conservare con la "lettera del messaggio" nel miglior modo possibile.

EDIT (Re: Magic):

La magia è cose diverse per persone diverse. Per quanto riguarda l'operatore ternario, si prega di rispettare la mia opinione mentre rispetto la tua. Grazie.

EDIT (Re: vecchie date e una seconda precisione):

Come studente di storia, ha senso per me. Il desiderio di "un secondo precisione" non è un assoluto. La perfezione, sebbene raggiungibile, non è richiesta.

È stato utile?

Soluzione

Suggerirei di dividere ogni datatime in parti (anno, mese, data, ore, minuti, secondi). Quindi, con ogni parte, fai una somma di base di più meno meno (ricordando che una data BC è effettivamente un numero negativo).

Non lo capirai mai assolutamente corretto. Dovrai prendere in considerazione gli anni del salto e se un anno di secolo è un anno di salto, il passaggio tra le date Gregoria/Julian ecc.

Inoltre, mi piacerebbe conoscere il tuo ragionamento per i limiti e l'elevato requisito di precisione!

Altri suggerimenti

Per tutte queste questioni vedi calcoli calendrici (Google per esso).

Oh, e non c'è stato un anno 0 d.C., il calendario è passato dall'1bc a 1ad, o meglio, noi moderni occidentali definiamo il calendario in quel modo, al momento che la maggior parte del mondo utilizzava altri sistemi.

Oppure, effettuare chiamate a calcolatori online come Questo E risparmia un sacco di tempo.

Alcune lingue e database datano aritmetici, altri no. Se archivi le tue date in un database, prova Postgres:

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

Se non usi un DB, diventa un po 'più problematico. L'aritmetica della data di PHP è ... beh, preferirei non parlarne. Python's è molto buono, ma inizia all'anno 1bc.

Potresti dover rotolare il tuo ...

Perché non sottrai i timestamp?

mktime(16,59,0,8,7,2001) - mktime(16,59,0,8,7,2000) = secondi tra loro

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top