¿Es posible que JavaScript calcule una marca de tiempo devuelta desde la función time()
de PHP y la presente en un formato legible como "Sun, 18 de abril de 2010 a las 4:00 p.m."?Fecha/hora de JavaScript legible desde el tiempo de PHP()
Respuesta
Uso del Date object para hacer eso:
new Date(<?php echo time(); ?>*1000)
es necesario multiplicar la marca de tiempo Unix en 1000 becuase Date
espera que la marca de tiempo para estar en milisegundos.
Y para formatear la fecha, puede utilizar este Date.format
method (Fecha no tiene ninguno incorporado).
Vas a querer ser realmente cuidadoso al hacer esto. Cuando toma un valor de tiempo del lado del servidor que es un valor tradicional de "número de segundos (o milisegundos) desde el límite de época", y luego lo convierte en algún tipo de objeto "Fecha", se produce una traducción en el huso horario apropiado para la configuración regional del contexto.
El problema surge cuando tienes un servidor ubicado en Chicago, y alguien en Hawaii usa tu sitio, por ejemplo después de una fiesta — uno de esos asuntos "luau", sin duda, completo con cerdo asado y faldones de hierba bailarinas, una noche rara bajo el cálido cielo tropical, flores exóticas que huelen las brisas del océano — y ya es tarde. ¡Dios mío, es casi medianoche! ¿Qué pensará mamá cuando le escriba sobre la fiesta?
Nuestro asistente a fiestas se sienta a las 11:30 PM para usar su sitio. Ahora, por supuesto, al estar considerablemente al este de Hawai, su servidor piensa que son las 5:30 a.m., y la fecha es un día más tarde que la fecha que nuestro asistente a la fiesta anotará en su nota rápida para mamá. Entonces su servidor escribe su valor de tiempo en una página web como se describe en las respuestas aquí, y — correctamente — la hora local de Hawái aparece en la página en la habitación de nuestro hotel de asistentes de fiesta.
El problema es el siguiente: si eso locales tiempo hace volver a la aplicación de algún campo de formulario, y su aplicación lo trata como hora local en Chicago, entonces su sitio conseguirá la fecha de ayer. Dependiendo de la aplicación que sea correcta o incorrecta, el punto es que debe hacer un seguimiento de donde una fecha (expresada en notación de calendario ordinaria) proviene de donde la fecha es utilizada.
Por supuesto, puede tener el problema opuesto. Es decir, si el servidor siempre muestra las fechas en su zona horaria local, los usuarios de otras partes del mundo verán valores de fecha y hora confusos (aparentemente incorrectos), por lo que la interfaz debe dejar en claro lo que significan esos valores. Los problemas se vuelven importantes cuando su sitio ofrece servicios relacionados con los horarios. Si es posible programar las operaciones, es importante que la interfaz mantenga las cosas en el nivel para que "30 de abril a las 10:00 p.m." signifique esa fecha y hora en el servidor o esa fecha y hora en la configuración regional desde la que se programó fue arreglado. Cualquiera que sea, debes tener cuidado de mantener las cosas consistentes.
En lugar de una marca de tiempo de unix numérico, también puede enviar una representación textual de la fecha que Date.parse() entiende.
Tal vez sea solo mi contribución al calentamiento global, pero creo que hay beneficios en el uso de un formato que es un poco más legible y contiene la información de la zona horaria.
p. Ej.
<?php
// I have "decided" America/Los_Angeles fits most of my audience
date_default_timezone_set('America/Los_Angeles');
$now = time();
$yesterday = strtotime('yesterday', $now);
// March 27, 1976 08:00:00 tz:America/Los_Angeles
$someotherdate = mktime(8, 0, 0, 3, 27, 1976)
?><html>
<head><title>...</title>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
function foo() {
$('.datetime').each(function() {
var t = $(this).text();
t = new Date(Date.parse(t)).toLocaleString();
$(this).text(t);
});
}
</script>
</head>
<body>
<div><span class="datetime"><?php echo date(DateTime::RSS, $now); ?></span></div>
<div><span class="datetime"><?php echo date(DateTime::RSS, $yesterday); ?></span></div>
<div><span class="datetime"><?php echo date(DateTime::RSS, $someotherdate); ?></span></div>
<button onclick="foo()">to local time</button>
</body>
</html>
Esto imprime
Sat, 17 Apr 2010 04:40:15 -0700
Fri, 16 Apr 2010 00:00:00 -0700
Sat, 27 Mar 1976 08:00:00 -0800
en mi navegador y (desde mi zona horaria local es Europe/Berlin, CET, GMT + 1/2) después de golpear el botón to local time
Samstag, 17. April 2010 13:40:15
Freitag, 16. April 2010 09:00:00
Samstag, 27. März 1976 17:00:00
Sí, pero mira mi respuesta. Si el servidor le entrega al Javascript un valor de tiempo que ha sido formateado como por hora local * en el servidor *, entonces el cliente verá el tiempo del lado del servidor. Eso puede ser deseado, o puede no serlo; depende de la aplicación y el significado del valor de tiempo. En cualquier caso, este enfoque arrojaría resultados diferentes que el enfoque de usar el valor de tiempo numérico directamente. – Pointy
@Pointy: No estoy seguro si entiendo su preocupación en este caso. Por supuesto, el valor depende de que el reloj del servidor "piense" la hora, es decir, si el reloj del servidor está equivocado, el valor también será incorrecto. Pero utilicé 'gmdate()' y 'DateTime :: W3C' como el formato, es decir, la salida se ve como' 2010-04-17T11: 12: 22 + 00: 00' donde '+00: 00' marca la zona horaria (al menos el desplazamiento). Date.parse() reconoce el desplazamiento y trata el valor en consecuencia. – VolkerK
Bien, en ese caso definitivamente tendría el mismo efecto que usar el valor de tiempo "en bruto" (el "número de segundos" numérico), así que lamento no haberlo visto. – Pointy
Ahora es 2013, y a medida que más y más personas cambian el procesamiento de los resultados de SQL en PHP para pasar los resultados en JSON y el procesamiento en el lado del cliente, creo que moment.js merece algo de atención por sí mismo para ofrecer un fácil reemplazo cementa las funciones de strtotime() y date() de PHP en Javascript, más algunas más.
Sólo incluyen:
<script src="SCRIPT_DIR/moment.min.js" type="text/javascript"></script>
Entonces es tan fácil como:
// Simulates ajax response
var data = { someDate: "2023-08-23 11:52:39" }
// .unix() converts to Unix timestamp: 1692816759
moment(data.someDate).unix();
// Displaying it in a readable format
// Aug 23, 11:52 AM
moment("2023-08-23 11:52:39").format('MMM D, hh:mm A');
// Now
moment();
// Support for manipulation and chaining
moment().add('days', 7).subtract('months', 1).hours(15).minutes(0).seconds(0);
, usted puede obtener el archivo de 5,5 kb js aquí:
Más documentos aquí:
- 1. javascript legible desde python
- 2. Convertir marca de tiempo en fecha/hora legible PHP
- 3. Cómo escribir JavaScript legible
- 4. Intervalo de tiempo legible por humanos automático
- 5. Convertir una marca de tiempo Unix de una fecha legible por humanos en PHP?
- 6. PHP is_readable() falla en el directorio samba legible
- 7. Convertir milisegundos a lapso de tiempo legible por humanos
- 8. marca de tiempo legible por el ser humano en el núcleo de Linux
- 9. PHP compare el tiempo
- 10. ¿Puedo cargar javascript desde un archivo php?
- 11. Pasar archivo desde Javascript cargar a PHP
- 12. Llamar a la función php desde JavaScript
- 13. llamando a la función javascript desde php
- 14. sendRedirect después del intervalo de tiempo evitando javascript o php
- 15. Devuelve verdadero/falso a javascript desde el archivo php
- 16. no ser capaz de convertir de FILETIME (ventanas de tiempo) a fechaHora (me da una fecha diferente)
- 17. Javascript IOS5 "ejecución de JavaScript excedió el tiempo de espera"
- 18. PHP ¿Convertir la fecha ISO a un formato más legible?
- 19. Detecta el tiempo de espera de la conexión del cliente de android java desde PHP
- 20. PHP file_get_contents ignorando el tiempo de espera?
- 21. Incremente el tiempo de la sesión php
- 22. ¿Cómo llamar a una función de JavaScript desde PHP?
- 23. convertir microsegundos en un tiempo legible por humanos
- 24. Convertir tiempo Unix en Fecha legible en Java
- 25. Convirtiendo CMTime a tiempo legible para humanos en Object-C
- 26. ejecutar una función de JavaScript desde un php if
- 27. ¿Cómo obtener el tiempo de ejecución de una consulta MySQL desde PHP?
- 28. Evite el límite de tiempo de ejecución de PHP
- 29. JAXB no lanza un error en mal fechaHora valores
- 30. ¿Cómo obtener el tiempo en milisegundos desde la época de Unix en Javascript?
¡Ese método Date.format es de ensueño! Muchas gracias :) – Lyon
En lugar de multiplicar, puede agregar 3 ceros: var now = new Date ( Php echo time();?> 000); –