Est-ce que quelqu'un sait comment convertir JS dateTime en date-heure MySQL? Existe-t-il également un moyen d’ajouter un nombre spécifique de minutes à JS datetime puis de le transmettre à MySQL datetime?
Bien que JS possède assez d'outils de base pour le 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());
};
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', ' ');
Sortie:
2012-06-22 05:40:06
Pour les 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')
Je pense que la solution peut être moins lourde en utilisant la méthode toISOString()
, elle offre une compatibilité étendue 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"
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 en une seule 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
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.
Solution 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
La vénérable bibliothèque DateJS a une routine de formatage (elle remplace ".toString ()"). Vous pouvez également en créer un vous-même assez facilement car les méthodes "Date" vous donnent tous les chiffres dont vous avez besoin.
Le moyen le plus simple de convertir JS Date au format date et heure SQL qui m’arrive à l’esprit est celui-ci. Il gère correctement le décalage 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: @ Paulo Roberto answer 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 de 23!
J'ai donné des exemples de format de date JavaScript simples, 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
Utiliser momentjs
var date = moment().format('YYYY-MM-DD H:mm:ss');
console.log(date) // 2016-06-23 15:59:08
Exemple, veuillez vérifier https://jsfiddle.net/sjy3vjwm/2/
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 voulez dans un fuseau horaire spécifique alors
_t.toLocaleString('indian', { timeZone: 'asia/kolkata' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');