Antworten:
JS verfügt zwar über genügend grundlegende Tools, ist jedoch ziemlich klobig.
/**
* 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
Objekt. new Date().toMysqlFormat()
oder new Date(2014,12,14).toMysqlFormat()
oder was auch immer.
toISOString
, empfehle ich den Ansatz von 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);
oder noch kürzer:
new Date().toISOString().slice(0, 19).replace('T', ' ');
Ausgabe:
2012-06-22 05:40:06
Für fortgeschrittenere Anwendungsfälle, einschließlich der Steuerung der Zeitzone, sollten Sie http://momentjs.com/ verwenden :
require('moment')().format('YYYY-MM-DD HH:mm:ss');
Für eine leichte Alternative zu momentjsBetrachten Sie 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];
Ich denke, die Lösung kann mit der Methode weniger klobig sein toISOString()
, sie hat eine breite Browserkompatibilität.
Ihr Ausdruck wird also ein Einzeiler sein:
new Date().toISOString().slice(0, 19).replace('T', ' ');
Die generierte Ausgabe:
"2017-06-29 17:54:04"
new Date(1091040026000).toISOString().slice(0, 19).replace('T', ' ');
Date
‚s Zeitzone versetzt . Während Ihre die zugrunde liegende UTC-Zeit im MySQL DATETIME-Format zurückgibt. In den meisten Fällen ist das Speichern der UTC möglicherweise besser, und in beiden Fällen sollte Ihre Datentabelle wahrscheinlich Standortinformationen in einem Feld enthalten. Alternativ ist die Umrechnung in die Ortszeit recht einfach: Verwenden Sie diese ... - Date.getTimezoneOffset() * 60 * 1000
Option (NB passt gegebenenfalls auch die Sommerzeit an).
JS-Zeitwert für MySQL
var datetime = new Date().toLocaleString();
ODER
const DATE_FORMATER = require( 'dateformat' );
var datetime = DATE_FORMATER( new Date(), "yyyy-mm-dd HH:MM:ss" );
ODER
const MOMENT= require( 'moment' );
let datetime = MOMENT().format( 'YYYY-MM-DD HH:mm:ss.000' );
Sie können dies in params senden, es wird funktionieren.
Für eine beliebige Datumszeichenfolge
// 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 );
Oder eine einzeilige Lösung,
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 );
Diese Lösung funktioniert auch für Node.js, wenn Timestamp in MySQL verwendet wird.
@ Gajus Kuizinas 'erste Antwort scheint Mozillas toISOString-Prototyp zu modifizieren
Vollständige Problemumgehung (um die Zeitzone zu erhalten) mit dem @ Gajus-Antwortkonzept:
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
neues Datum (). toISOString (). Slice (0, 10) + "" + neues Datum (). toLocaleTimeString ('en-GB');
100% arbeiten
Ich habe einfache Beispiele für das JavaScript-Datumsformat angegeben. Bitte überprüfen Sie den folgenden Code
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
Verwenden von momentjs
var date = moment().format('YYYY-MM-DD H:mm:ss');
console.log(date) // 2016-06-23 15:59:08
Beispiel überprüfen Sie bitte https://jsfiddle.net/sjy3vjwm/2/
Der einfachste richtige Weg, um JS Date in das SQL datetime-Format zu konvertieren, das mir einfällt, ist dieser. Der Zeitzonenversatz wird korrekt behandelt.
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
Beachten Sie, dass die Antwort von @Paulo Roberto am neuen Tag zu falschen Ergebnissen führt (ich kann keine Kommentare hinterlassen). Zum Beispiel :
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
Wir haben den 22. Juni statt den 23. Juni!
var _t = new Date();
Wenn Sie einfach das UTC-Format wünschen
_t.toLocaleString('indian', { timeZone: 'UTC' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');
oder
_t.toISOString().slice(0, 19).replace('T', ' ');
und wenn in einer bestimmten Zeitzone dann wollen
_t.toLocaleString('indian', { timeZone: 'asia/kolkata' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');
Ich benutze diese lange Zeit und es ist sehr hilfreich für mich, verwenden Sie, wie Sie möchten
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])))
}
und dann einfach:
new Date().date()
Dies gibt das aktuelle Datum im 'MySQL-Format' zurück.
für zusätzliche Zeit ist
new Date().addTime('0:30:0')
das wird 30 Minuten hinzufügen .... und so weiter