2011-12-22 18 views
18

La classe DateTime ha alcuni metodi pratici e sembra complessivamente superiore alle funzioni di data nativa come strtotime, mktime e strftime (e altro). Ma c'è qualche inconveniente o una ragione per cui non dovrei usarlo?DateTime class vs. native date-functions PHP

L'unica ragione per cui posso pensare è che potrebbe essere più costoso creare un'intera istanza di una classe piuttosto che usare semplicemente una funzione.

  • Sei d'accordo?
  • Ha senso per noi un oggetto DateTime per cose semplici?
  • Ci sono altri svantaggi?

Sembra un po 'di confusione passare da una di queste due opzioni a tutte le ore, quindi mi piacerebbe avere l'autorizzazione che dovrei preferire.

Due esempi per la mia decisione sarebbe:

  • Conversione di una data per un valore localizzato
  • Calcolo del tempo tra due date

risposta

36

Se la vostra preoccupazione è che la creazione di un'istanza di classe è costoso e che ostacolerà le prestazioni, quindi temo che tu stia abbaiando all'albero sbagliato. Non si dovrebbe mai valutare se utilizzare un approccio OO comprovato laddove ha senso. Se ha senso utilizzare la classe DateTime per eseguire determinati calcoli di date, quindi usarlo. Non è costoso al punto in cui la tua app lo sentirà, a meno che tu non faccia qualcosa di pazzo come creare 1 milione di oggetti DateTime.

Motivo per cui DateTime è eccezionale è perché allevia la preoccupazione dell'ora legale specificando il fuso orario durante la creazione dell'oggetto. È anche facile ottenere differenze tra le date o ottenere intervalli tra oggetti diversi. In pratica riduce la quantità di preoccupazioni e di codice richiesti (ma ammetto che a volte è sbagliato, si spera che venga risolto nella versione 5.4 di PHP).

Bottom line - Lo userei sempre.

+5

più l'intervallo di date, anche in un ambiente PHP a 32 bit, è sufficiente per mantenere un paleobiologo o un cosmologo che studia l'inizio o la fine dell'universo felice –

+0

Vedo la 'prontezza' di DateTime, ma useresti anche per cose semplici come quelle che ho appena aggiunto alla mia domanda? – Anonymous

+4

Vorrei, perché prendiamo le funzioni 'mktime' o' strtotime' - richiedono un certo ordine di parametri che rappresentano il giorno, l'anno, il mese, l'ora ecc. Con 'DateTime' Posso creare l'oggetto usando parametri arbitrari come' $ date = DateTime :: createFromFormat ('m H: s D-Y', $ weird_user_input); 'che può quindi essere formattato per unix timestamp o qualsiasi altro formato di data che desidero. Posso anche specificare il fuso orario immediatamente durante la creazione dell'oggetto. Quindi sì, lo userei sicuramente dal momento che non vedo davvero dove il modo procedurale mi possa aiutare meglio. –