Estoy almacenando tiempo en una base de datos MySQL como una marca de tiempo de Unix y eso se envía a algún código JavaScript. ¿Cómo obtendría el tiempo justo?
Por ejemplo, en formato HH / MM / SS.
Estoy almacenando tiempo en una base de datos MySQL como una marca de tiempo de Unix y eso se envía a algún código JavaScript. ¿Cómo obtendría el tiempo justo?
Por ejemplo, en formato HH / MM / SS.
Respuestas:
let unix_timestamp = 1549312452
// Create a new JavaScript Date object based on the timestamp
// multiplied by 1000 so that the argument is in milliseconds, not seconds.
var date = new Date(unix_timestamp * 1000);
// Hours part from the timestamp
var hours = date.getHours();
// Minutes part from the timestamp
var minutes = "0" + date.getMinutes();
// Seconds part from the timestamp
var seconds = "0" + date.getSeconds();
// Will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);
console.log(formattedTime);
Para obtener más información sobre el objeto Fecha, consulte MDN o la especificación ECMAScript 5 .
function timeConverter(UNIX_timestamp){
var a = new Date(UNIX_timestamp * 1000);
var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var year = a.getFullYear();
var month = months[a.getMonth()];
var date = a.getDate();
var hour = a.getHours();
var min = a.getMinutes();
var sec = a.getSeconds();
var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ;
return time;
}
console.log(timeConverter(0));
var min = a.getMinutes() < 10 ? '0' + a.getMinutes() : a.getMinutes(); var sec = a.getSeconds() < 10 ? '0' + a.getSeconds() : a.getSeconds();
getMonth()
devuelve un número de mes entre 0 y 11, por lo tanto, a.getMonth() - 1
está mal.
JavaScript funciona en milisegundos, por lo que primero tendrá que convertir la marca de tiempo UNIX de segundos a milisegundos.
var date = new Date(UNIX_Timestamp * 1000);
// Manipulate JavaScript Date object here...
Soy parcial a la Date.format()
biblioteca de Jacob Wright , que implementa el formato de fecha JavaScript en el estilo de la date()
función de PHP .
new Date(unix_timestamp * 1000).format('h:i:s')
format is not a function
. Pero esto aparentemente funciona: stackoverflow.com/a/34015511/7550772
Utilizar:
var s = new Date(1504095567183).toLocaleDateString("en-US")
console.log(s)
// expected output "8/30/2017"
y por tiempo:
var s = new Date(1504095567183).toLocaleTimeString("en-US")
console.log(s)
// expected output "3:19:27 PM"
toLocaleString
incluye tanto la fecha como la hora.
Aquí está la solución más simple de una línea para formatear segundos como hh:mm:ss
:
/**
* Convert seconds to time string (hh:mm:ss).
*
* @param Number s
*
* @return String
*/
function time(s) {
return new Date(s * 1e3).toISOString().slice(-13, -5);
}
console.log( time(12345) ); // "03:25:45"
El método
Date.prototype.toISOString()
devuelve el tiempo en formato ISO 8601 extendido simplificado , que siempre tiene 24 o 27 caracteres de longitud (es decir,YYYY-MM-DDTHH:mm:ss.sssZ
o±YYYYYY-MM-DDTHH:mm:ss.sssZ
respectivamente). La zona horaria siempre es cero desplazamiento UTC.
NB: esta solución no requiere ninguna biblioteca de terceros y es compatible con todos los navegadores modernos y motores de JavaScript.
toTimeString
no funcionaba bien con las zonas horarias. Lamentablemente, su edición fue rechazada antes de que la viera. Sin embargo, sugeriría usar toISOString
en su lugar, ya que toGMTString
está en desuso y puede devolver resultados diferentes en diferentes plataformas.
Pensaría en usar una biblioteca como momentjs.com , eso lo hace realmente simple:
Basado en una marca de tiempo Unix:
var timestamp = moment.unix(1293683278);
console.log( timestamp.format("HH/mm/ss") );
Basado en una cadena de fecha MySQL:
var now = moment("2010-10-10 12:03:15");
console.log( now.format("HH/mm/ss") );
console.log
ejemplos, estaba confundido sobre el formato debido al /
, pero me ayudó mucho.
La marca de tiempo UNIX es el número de segundos desde las 00:00:00 UTC del 1 de enero de 1970 (según Wikipedia ).
El objeto Argumento de fecha en Javascript es el número de milisegundos desde las 00:00:00 UTC del 1 de enero de 1970 (según la documentación de Javascript de W3Schools ).
Vea el código a continuación, por ejemplo:
function tm(unix_tm) {
var dt = new Date(unix_tm*1000);
document.writeln(dt.getHours() + '/' + dt.getMinutes() + '/' + dt.getSeconds() + ' -- ' + dt + '<br>');
}
tm(60);
tm(86400);
da:
1/1/0 -- Thu Jan 01 1970 01:01:00 GMT+0100 (Central European Standard Time)
1/0/0 -- Fri Jan 02 1970 01:00:00 GMT+0100 (Central European Standard Time)
La solución de una línea más corta para formatear segundos como hh: mm: ss: variante:
console.log(new Date(1549312452 * 1000).toISOString().slice(0, 19).replace('T', ' '));
// "2019-02-04 20:34:12"
Usando Moment.js , puede obtener la hora y la fecha de esta manera:
var dateTimeString = moment(1439198499).format("DD-MM-YYYY HH:mm:ss");
Y solo puede obtener tiempo usando esto:
var timeString = moment(1439198499).format("HH:mm:ss");
El problema con las soluciones antes mencionadas es que si la hora, minuto o segundo tiene solo un dígito (es decir, 0-9), la hora sería incorrecta, por ejemplo, podría ser 2: 3: 9, pero debería ser 02: 03:09.
Según esta página , parece ser una mejor solución para utilizar el método "toLocaleTimeString" de Date.
date.toLocaleTimeString()
toTimeString
método. Consulte aquí: stackoverflow.com/a/35890537/1249581 .
Otra forma: desde una fecha ISO 8601 .
var timestamp = 1293683278;
var date = new Date(timestamp * 1000);
var iso = date.toISOString().match(/(\d{2}:\d{2}:\d{2})/)
alert(iso[1]);
Basado en la respuesta de @ shomrat, aquí hay un fragmento que escribe automáticamente datetime de esta manera (un poco similar a la fecha de StackOverflow para las respuestas:) answered Nov 6 '16 at 11:51
:
today, 11:23
o
yersterday, 11:23
o (si es diferente pero el mismo año que hoy)
6 Nov, 11:23
o (si es otro año que hoy)
6 Nov 2016, 11:23
function timeConverter(t) {
var a = new Date(t * 1000);
var today = new Date();
var yesterday = new Date(Date.now() - 86400000);
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var year = a.getFullYear();
var month = months[a.getMonth()];
var date = a.getDate();
var hour = a.getHours();
var min = a.getMinutes();
if (a.setHours(0,0,0,0) == today.setHours(0,0,0,0))
return 'today, ' + hour + ':' + min;
else if (a.setHours(0,0,0,0) == yesterday.setHours(0,0,0,0))
return 'yesterday, ' + hour + ':' + min;
else if (year == today.getFullYear())
return date + ' ' + month + ', ' + hour + ':' + min;
else
return date + ' ' + month + ' ' + year + ', ' + hour + ':' + min;
}
La solución moderna que no necesita una biblioteca de 40 KB:
Intl.DateTimeFormat es la forma no culturalmente imperialista de formatear una fecha / hora.
// Setup once
var options = {
//weekday: 'long',
//month: 'short',
//year: 'numeric',
//day: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric'
},
intlDate = new Intl.DateTimeFormat( undefined, options );
// Reusable formatter
var timeStamp = 1412743273;
console.log( intlDate.format( new Date( 1000 * timeStamp ) ) );
Mi marca de tiempo se obtiene de un backend de PHP. Intenté todos los métodos anteriores y no funcionó. Luego me encontré con un tutorial que funcionó:
var d =val.timestamp;
var date=new Date(+d); //NB: use + before variable name
console.log(d);
console.log(date.toDateString());
console.log(date.getFullYear());
console.log(date.getMinutes());
console.log(date.getSeconds());
console.log(date.getHours());
console.log(date.toLocaleTimeString());
los métodos anteriores generarán estos resultados
1541415288860
Mon Nov 05 2018
2018
54
48
13
1:54:48 PM
Hay muchos métodos que funcionan perfectamente con marcas de tiempo. No puedo enumerarlos a todos
function getTIMESTAMP() {
var date = new Date();
var year = date.getFullYear();
var month = ("0" + (date.getMonth() + 1)).substr(-2);
var day = ("0" + date.getDate()).substr(-2);
var hour = ("0" + date.getHours()).substr(-2);
var minutes = ("0" + date.getMinutes()).substr(-2);
var seconds = ("0" + date.getSeconds()).substr(-2);
return year + "-" + month + "-" + day + " " + hour + ":" + minutes + ":" + seconds;
}
//2016-01-14 02:40:01
Presta atención al problema cero con algunas de las respuestas. Por ejemplo, la marca de tiempo 1439329773
se convertiría por error a 12/08/2015 0:49
.
Sugeriría usar lo siguiente para superar este problema:
var timestamp = 1439329773; // replace your timestamp
var date = new Date(timestamp * 1000);
var formattedDate = ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear() + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2);
console.log(formattedDate);
Ahora da como resultado:
12/08/2015 00:49
// Format value as two digits 0 => 00, 1 => 01
function twoDigits(value) {
if(value < 10) {
return '0' + value;
}
return value;
}
var date = new Date(unix_timestamp*1000);
// display in format HH:MM:SS
var formattedTime = twoDigits(date.getHours())
+ ':' + twoDigits(date.getMinutes())
+ ':' + twoDigits(date.getSeconds());
Ver Fecha / Epoch Converter .
Necesitas hacerlo ParseInt
, de lo contrario no funcionaría:
if (!window.a)
window.a = new Date();
var mEpoch = parseInt(UNIX_timestamp);
if (mEpoch < 10000000000)
mEpoch *= 1000;
------
a.setTime(mEpoch);
var year = a.getFullYear();
...
return time;
Puede usar la siguiente función para convertir su marca de tiempo a HH:MM:SS
formato:
var convertTime = function(timestamp, separator) {
var pad = function(input) {return input < 10 ? "0" + input : input;};
var date = timestamp ? new Date(timestamp * 1000) : new Date();
return [
pad(date.getHours()),
pad(date.getMinutes()),
pad(date.getSeconds())
].join(typeof separator !== 'undefined' ? separator : ':' );
}
Sin pasar un separador, se usa :
como separador (predeterminado):
time = convertTime(1061351153); // --> OUTPUT = 05:45:53
Si desea usarlo /
como separador, simplemente páselo como el segundo parámetro:
time = convertTime(920535115, '/'); // --> OUTPUT = 09/11/55
var convertTime = function(timestamp, separator) {
var pad = function(input) {return input < 10 ? "0" + input : input;};
var date = timestamp ? new Date(timestamp * 1000) : new Date();
return [
pad(date.getHours()),
pad(date.getMinutes()),
pad(date.getSeconds())
].join(typeof separator !== 'undefined' ? separator : ':' );
}
document.body.innerHTML = '<pre>' + JSON.stringify({
920535115 : convertTime(920535115, '/'),
1061351153 : convertTime(1061351153, ':'),
1435651350 : convertTime(1435651350, '-'),
1487938926 : convertTime(1487938926),
1555135551 : convertTime(1555135551, '.')
}, null, '\t') + '</pre>';
Ver también este violín .
function getDateTimeFromTimestamp(unixTimeStamp) {
var date = new Date(unixTimeStamp);
return ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear() + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2);
}
var myTime = getDateTimeFromTimestamp(1435986900000);
console.log(myTime); // output 01/05/2000 11:00
Si desea convertir la duración del tiempo de Unix en horas, minutos y segundos reales, puede usar el siguiente código:
var hours = Math.floor(timestamp / 60 / 60);
var minutes = Math.floor((timestamp - hours * 60 * 60) / 60);
var seconds = Math.floor(timestamp - hours * 60 * 60 - minutes * 60 );
var duration = hours + ':' + minutes + ':' + seconds;
function getDateTime(unixTimeStamp) {
var d = new Date(unixTimeStamp);
var h = (d.getHours().toString().length == 1) ? ('0' + d.getHours()) : d.getHours();
var m = (d.getMinutes().toString().length == 1) ? ('0' + d.getMinutes()) : d.getMinutes();
var s = (d.getSeconds().toString().length == 1) ? ('0' + d.getSeconds()) : d.getSeconds();
var time = h + '/' + m + '/' + s;
return time;
}
var myTime = getDateTime(1435986900000);
console.log(myTime); // output 01/15/00
El siguiente código también proporciona milisegundos de 3 dígitos, ideal para prefijos de registro de consola:
const timeStrGet = date => {
const milliSecsStr = date.getMilliseconds().toString().padStart(3, '0') ;
return `${date.toLocaleTimeString('it-US')}.${milliSecsStr}`;
};
setInterval(() => console.log(timeStrGet(new Date())), 299);
convertir marcas de tiempo a cadena de fecha en js
moment().format('YYYY-MM-DD hh:mm:ss');
// "2020-01-10 11:55:43"
moment(1578478211000).format('YYYY-MM-DD hh:mm:ss');
// "2020-01-08 06:10:11"
day.js
github.com/iamkun/dayjs
La respuesta dada por @Aron funciona, pero no funcionó para mí, ya que estaba tratando de convertir la marca de tiempo a partir de 1980. Así que hice algunos cambios de la siguiente manera
function ConvertUnixTimeToDateForLeap(UNIX_Timestamp) {
var dateObj = new Date(1980, 0, 1, 0, 0, 0, 0);
dateObj.setSeconds(dateObj.getSeconds() + UNIX_Timestamp);
return dateObj;
}
document.body.innerHTML = 'TimeStamp : ' + ConvertUnixTimeToDateForLeap(1269700200);
Entonces, si tiene una marca de tiempo que comienza en otra década más o menos, solo use esto. Me ahorró mucho dolor de cabeza.