Respuestas:
Si bien JS posee suficientes herramientas básicas para hacer esto, es bastante torpe.
/**
* You first need to create a formatting function to pad numbers to two digits…
**/
function twoDigits(d) {
if(0 <= d && d < 10) return "0" + d.toString();
if(-10 < d && d < 0) return "-0" + (-1*d).toString();
return d.toString();
}
/**
* …and then create the method to output the date string as desired.
* Some people hate using prototypes this way, but if you are going
* to apply this to more than one Date object, having it as a prototype
* makes sense.
**/
Date.prototype.toMysqlFormat = function() {
return this.getUTCFullYear() + "-" + twoDigits(1 + this.getUTCMonth()) + "-" + twoDigits(this.getUTCDate()) + " " + twoDigits(this.getUTCHours()) + ":" + twoDigits(this.getUTCMinutes()) + ":" + twoDigits(this.getUTCSeconds());
};
Date
objeto. new Date().toMysqlFormat()
o new Date(2014,12,14).toMysqlFormat()
o lo que sea.
toISOString
enfoque de Gajus .
var date;
date = new Date();
date = date.getUTCFullYear() + '-' +
('00' + (date.getUTCMonth()+1)).slice(-2) + '-' +
('00' + date.getUTCDate()).slice(-2) + ' ' +
('00' + date.getUTCHours()).slice(-2) + ':' +
('00' + date.getUTCMinutes()).slice(-2) + ':' +
('00' + date.getUTCSeconds()).slice(-2);
console.log(date);
o incluso más corto:
new Date().toISOString().slice(0, 19).replace('T', ' ');
Salida:
2012-06-22 05:40:06
Para casos de uso más avanzados, incluido el control de la zona horaria, considere usar http://momentjs.com/ :
require('moment')().format('YYYY-MM-DD HH:mm:ss');
Para una alternativa ligera a momentjs, considere https://github.com/taylorhakes/fecha
require('fecha').format('YYYY-MM-DD HH:mm:ss')
var d = new Date(); d.toISOString().split('T')[0]+' '+d.toTimeString().split(' ')[0];
Creo que la solución puede ser menos complicada mediante el uso del método toISOString()
, tiene una amplia compatibilidad con el navegador.
Entonces su expresión será de una sola línea:
new Date().toISOString().slice(0, 19).replace('T', ' ');
La salida generada:
"2017-06-29 17:54:04"
new Date(1091040026000).toISOString().slice(0, 19).replace('T', ' ');
Date
's de desplazamiento de zona horaria . Mientras que el suyo devuelve la hora UTC subyacente en formato MySQL DATETIME. En la mayoría de los casos, el almacenamiento del UTC puede ser mejor, y en cualquier caso, su tabla de datos probablemente debería proporcionar información de ubicación en un campo. Alternativamente, convertir a la hora local es bastante fácil: usar ... - Date.getTimezoneOffset() * 60 * 1000
(NB también se ajusta para el horario de verano, cuando corresponda).
Valor de tiempo JS para MySQL
var datetime = new Date().toLocaleString();
O
const DATE_FORMATER = require( 'dateformat' );
var datetime = DATE_FORMATER( new Date(), "yyyy-mm-dd HH:MM:ss" );
O
const MOMENT= require( 'moment' );
let datetime = MOMENT().format( 'YYYY-MM-DD HH:mm:ss.000' );
puedes enviar esto en params, funcionará.
Para una cadena de fecha arbitraria,
// Your default date object
var starttime = new Date();
// Get the iso time (GMT 0 == UTC 0)
var isotime = new Date((new Date(starttime)).toISOString() );
// getTime() is the unix time value, in milliseconds.
// getTimezoneOffset() is UTC time and local time in minutes.
// 60000 = 60*1000 converts getTimezoneOffset() from minutes to milliseconds.
var fixedtime = new Date(isotime.getTime()-(starttime.getTimezoneOffset()*60000));
// toISOString() is always 24 characters long: YYYY-MM-DDTHH:mm:ss.sssZ.
// .slice(0, 19) removes the last 5 chars, ".sssZ",which is (UTC offset).
// .replace('T', ' ') removes the pad between the date and time.
var formatedMysqlString = fixedtime.toISOString().slice(0, 19).replace('T', ' ');
console.log( formatedMysqlString );
O una solución de una sola línea,
var formatedMysqlString = (new Date ((new Date((new Date(new Date())).toISOString() )).getTime() - ((new Date()).getTimezoneOffset()*60000))).toISOString().slice(0, 19).replace('T', ' ');
console.log( formatedMysqlString );
Esta solución también funciona para Node.js cuando se usa Timestamp en mysql.
La primera respuesta de @Gajus Kuizinas parece modificar el prototipo toISOString de mozilla
La venerable biblioteca DateJS tiene una rutina de formateo (anula ".toString ()"). También puedes hacer uno tú mismo con bastante facilidad porque los métodos de "Fecha" te dan todos los números que necesitas.
Solución alternativa completa (para mantener la zona horaria) usando el concepto de respuesta @Gajus:
var d = new Date(),
finalDate = d.toISOString().split('T')[0]+' '+d.toTimeString().split(' ')[0];
console.log(finalDate); //2018-09-28 16:19:34 --example output
nueva Fecha (). toISOString (). slice (0, 10) + "" + nueva Fecha (). toLocaleTimeString ('en-GB');
100% trabajando
He dado ejemplos simples de formato de fecha de JavaScript, por favor verifique el siguiente código
var data = new Date($.now()); // without jquery remove this $.now()
console.log(data)// Thu Jun 23 2016 15:48:24 GMT+0530 (IST)
var d = new Date,
dformat = [d.getFullYear() ,d.getMonth()+1,
d.getDate()
].join('-')+' '+
[d.getHours(),
d.getMinutes(),
d.getSeconds()].join(':');
console.log(dformat) //2016-6-23 15:54:16
Usando momentjs
var date = moment().format('YYYY-MM-DD H:mm:ss');
console.log(date) // 2016-06-23 15:59:08
Ejemplo, consulte https://jsfiddle.net/sjy3vjwm/2/
La forma correcta más fácil de convertir JS Date al formato de fecha y hora de SQL que se me ocurre es esta. Maneja correctamente el desplazamiento de la zona horaria.
const toSqlDatetime = (inputDate) => {
const date = new Date(inputDate)
const dateWithOffest = new Date(date.getTime() - (date.getTimezoneOffset() * 60000))
return dateWithOffest
.toISOString()
.slice(0, 19)
.replace('T', ' ')
}
toSqlDatetime(new Date()) // 2019-08-07 11:58:57
toSqlDatetime(new Date('2016-6-23 1:54:16')) // 2016-06-23 01:54:16
Tenga en cuenta que la respuesta de @Paulo Roberto producirá resultados incorrectos en el turno del nuevo día (no puedo dejar comentarios). Por ejemplo :
var d = new Date('2016-6-23 1:54:16'),
finalDate = d.toISOString().split('T')[0]+' '+d.toTimeString().split(' ')[0];
console.log(finalDate); // 2016-06-22 01:54:16
¡Tenemos 22 de junio en lugar de 23!
var _t = new Date();
si quieres el formato UTC simplemente
_t.toLocaleString('indian', { timeZone: 'UTC' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');
o
_t.toISOString().slice(0, 19).replace('T', ' ');
y si quieres en una zona horaria específica, entonces
_t.toLocaleString('indian', { timeZone: 'asia/kolkata' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');
Estoy usando este largo tiempo y es muy útil para mí, úsalo como quieras
Date.prototype.date=function() {
return this.getFullYear()+'-'+String(this.getMonth()+1).padStart(2, '0')+'-'+String(this.getDate()).padStart(2, '0')
}
Date.prototype.time=function() {
return String(this.getHours()).padStart(2, '0')+':'+String(this.getMinutes()).padStart(2, '0')+':'+String(this.getSeconds()).padStart(2, '0')
}
Date.prototype.dateTime=function() {
return this.getFullYear()+'-'+String(this.getMonth()+1).padStart(2, '0')+'-'+String(this.getDate()).padStart(2, '0')+' '+String(this.getHours()).padStart(2, '0')+':'+String(this.getMinutes()).padStart(2, '0')+':'+String(this.getSeconds()).padStart(2, '0')
}
Date.prototype.addTime=function(time) {
var time=time.split(":")
var rd=new Date(this.setHours(this.getHours()+parseInt(time[0])))
rd=new Date(rd.setMinutes(rd.getMinutes()+parseInt(time[1])))
return new Date(rd.setSeconds(rd.getSeconds()+parseInt(time[2])))
}
Date.prototype.addDate=function(time) {
var time=time.split("-")
var rd=new Date(this.setFullYear(this.getFullYear()+parseInt(time[0])))
rd=new Date(rd.setMonth(rd.getMonth()+parseInt(time[1])))
return new Date(rd.setDate(rd.getDate()+parseInt(time[2])))
}
Date.prototype.subDate=function(time) {
var time=time.split("-")
var rd=new Date(this.setFullYear(this.getFullYear()-parseInt(time[0])))
rd=new Date(rd.setMonth(rd.getMonth()-parseInt(time[1])))
return new Date(rd.setDate(rd.getDate()-parseInt(time[2])))
}
y luego solo:
new Date().date()
que devuelve la fecha actual en 'formato MySQL'
para agregar tiempo es
new Date().addTime('0:30:0')
que agregará 30 minutos ... y así sucesivamente