2011-01-22 30 views
10

me trató¿Cómo puedo obtener fecha y hora actual en PHP

$dtToday = DateTime::createFromFormat('Y-m-d', date('Y-m-d')); 

pero cuando la producción se

die($dtToday->format('d M Y g:i:s a')); 

sigo teniendo el tiempo, por ejemplo "22 ene 2011 04:53:59 pm". ¿Porqué es eso?

ACTUALIZACIÓN

Ah ... mucha gente me ha entendido, mi mal, que se olvidó de señalar el punto principal. Creé la fecha solo con la parte de la fecha, no quiero la hora. Así que me esperaba algo así

22 Jan 2011 12:00:00 am 
+0

¿Usted pidió que la fecha se devuelve como 'd MY g: i: sa' entonces, ¿qué pasa con la salida? –

+0

@ Salman A, creé la fecha con el tiempo ahora, ¿así que esperaría que fuera la hora de las 12:00:00 am? –

+0

OK, he publicado una respuesta –

Respuesta

11

OK, admito que no estoy familiarizado con la clase DateTime. Pero estoy seguro de que proporciona métodos como setHour, setMinute, etc., que puede usar para poner a cero la porción de tiempo. En lo personal, que crearía la fecha con la función mktime():

echo date("Y-m-d H:i:s", // this line is for demonstration 
    mktime(0, 0, 0)  // this generates a timestamp which can be used in most date functions 
          // first three parameters are hour, minute, second which I set to 0 
          // remaining parameters are optional 
          // infact all parameters are optional and all parameters default to corresponding portion of the *current* date/time 
); 
5

Usted puede hacer esto haciendo pasar la fecha Unix actual como el segundo parámetro a la función de fecha

echo date("Y-m-d H:i:s",time()); 
+4

el segundo parámetro a la fecha() se establece por defecto en el tiempo(), por lo que la fecha ('Y-m-d') es suficiente. – gregjor

+0

en realidad no es el formato, mira mi actualización. Básicamente, estoy preguntando por qué después de crear el DateTime con solo la fecha menos la parte del tiempo, ¿por qué todavía tengo el tiempo? Quiero la fecha sin la porción de tiempo –

0

¿Es utilizando UTC, o algo así?

Tengo una versión de PHP que me da un error cada vez que hago algo date relacionado sin utilizar primero date_default_timezone_set. Quizás eso te ayude.

0

Elimina esta parte g:i:s a de tu código.

Ahora, si quieres una buena fecha formateada según tu local, te recomiendo que uses la función strftime().

+0

Lo siento, me refiero a por qué después de crear el DateTime sin la porción de tiempo, ¿por qué todavía tengo el tiempo? –

1

que está recibiendo "22 ene 2011 04:53:59 pm", porque esas son las reglas formatea tu cita con:
d (días): 22
M (mes): Jan
Y (Año): 2011 formato
g (12 horas): 4
i (minutos): 53
s (segundos): 59
un (aM/pM): pm
Sea más speciffic acerca del formato desea como tu marca de tiempo para tener. Sugiero que haga un pico en la documentación php date.

+0

Lo siento, me refiero a por qué después de crear el DateTime sin la porción de tiempo, ¿por qué todavía tengo tiempo? –

12

consulte la documentación de DateTime::createFromFormat:

Si formato no contiene el carácter! luego, las partes del tiempo generado que no están especificadas en el formato se establecerán en la hora actual del sistema.

Si lo hace la siguiente llamada a la función, obtendrá el resultado que espera:

$dtToday = DateTime::createFromFormat('!Y-m-d', date('Y-m-d')); 
5

fecha y hora de inicio de hoy

$today_start_ts = strtotime(date('Y-m-d', time()). '00:00:00'); 
+0

debería ser '00:00:00' No olvide el espacio. – modu

+0

Esta debería ser la respuesta aceptada. –

Cuestiones relacionadas