Réponses:
Bien que JS possède suffisamment d'outils de base pour ce faire, c'est assez maladroit.
/**
* 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
objet. new Date().toMysqlFormat()
ou new Date(2014,12,14).toMysqlFormat()
quoi que ce soit.
toISOString
approche 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);
ou même plus court:
new Date().toISOString().slice(0, 19).replace('T', ' ');
Production:
2012-06-22 05:40:06
Pour des cas d'utilisation plus avancés, y compris le contrôle du fuseau horaire, envisagez d'utiliser http://momentjs.com/ :
require('moment')().format('YYYY-MM-DD HH:mm:ss');
Pour une alternative légère à momentjs, considérez 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];
Je pense que la solution peut être moins maladroite en utilisant la méthode toISOString()
, elle a une large compatibilité avec les navigateurs.
Donc, votre expression sera un one-liner:
new Date().toISOString().slice(0, 19).replace('T', ' ');
La sortie générée:
"2017-06-29 17:54:04"
new Date(1091040026000).toISOString().slice(0, 19).replace('T', ' ');
Date
l » fuseau horaire décalé . Alors que le vôtre renvoie l'heure UTC sous-jacente au format MySQL DATETIME. Dans la plupart des cas, le stockage de l'UTC peut être mieux, et dans les deux cas, votre table de données devrait probablement donner des informations de localisation dans un champ. Alternativement, la conversion à l'heure locale est assez simple: utilisez ... - Date.getTimezoneOffset() * 60 * 1000
(NB ajuste également l'heure d'été le cas échéant).
Valeur de temps JS pour MySQL
var datetime = new Date().toLocaleString();
OU
const DATE_FORMATER = require( 'dateformat' );
var datetime = DATE_FORMATER( new Date(), "yyyy-mm-dd HH:MM:ss" );
OU
const MOMENT= require( 'moment' );
let datetime = MOMENT().format( 'YYYY-MM-DD HH:mm:ss.000' );
vous pouvez envoyer ceci dans les paramètres, cela fonctionnera.
Pour une chaîne de date arbitraire,
// 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 );
Ou une solution mono-ligne,
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 );
Cette solution fonctionne également pour Node.js lors de l'utilisation de Timestamp dans mysql.
La première réponse de @Gajus Kuizinas semble modifier le prototype toISOString de Mozilla
Solution de contournement complète (pour conserver le fuseau horaire) en utilisant le concept de réponse @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
new Date (). toISOString (). slice (0, 10) + "" + new Date (). toLocaleTimeString ('en-GB');
100% de travail
J'ai donné des exemples simples de format de date JavaScript, veuillez vérifier le code ci-dessous
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
Utilisation de momentjs
var date = moment().format('YYYY-MM-DD H:mm:ss');
console.log(date) // 2016-06-23 15:59:08
Exemple s'il vous plaît vérifier https://jsfiddle.net/sjy3vjwm/2/
Le moyen le plus simple de convertir la date JS au format datetime SQL qui me vient à l'esprit est celui-ci. Il gère correctement le décalage du fuseau horaire.
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
Attention, la réponse de @Paulo Roberto produira des résultats incorrects au tournant du nouveau jour (je ne peux pas laisser de commentaires). Par exemple :
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
Nous avons le 22 juin au lieu du 23!
var _t = new Date();
si vous voulez simplement le format UTC
_t.toLocaleString('indian', { timeZone: 'UTC' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');
ou
_t.toISOString().slice(0, 19).replace('T', ' ');
et si vous le souhaitez dans un fuseau horaire spécifique, alors
_t.toLocaleString('indian', { timeZone: 'asia/kolkata' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');
J'utilise ce temps et c'est très utile pour moi, utilisez comme vous le souhaitez
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])))
}
et puis juste:
new Date().date()
qui renvoie la date actuelle au 'format MySQL'
car ajouter du temps est
new Date().addTime('0:30:0')
ce qui ajoutera 30 minutes ... et ainsi de suite