javascript - Konvertera JS datumtid till MySQL datumtid


Vet någon hur man konverterar JS dateTime till MySQL datetime? Finns det också ett sätt att lägga till ett specifikt antal minuter till JS datetime och sedan skicka det till MySQL datetime?

Svar #1

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);

eller ännu kortare:

new Date().toISOString().slice(0, 19).replace('T', ' ');

Utdata :

2012-06-22 05:40:06

För mer avancerade användningsfall, inklusive att kontrollera tidszonen, överväg att använda http://momentjs.com/:

require('moment')().format('YYYY-MM-DD HH:mm:ss');

För ett lättviktsalternativ till momentjs, överväg https://github.com/taylorhakes/fecha

require('fecha').format('YYYY-MM-DD HH:mm:ss')

Svar #2

Jag tror att lösningen kan vara mindre klumpig genom att använda metoden toISOString(), den har bred webbläsarkompatibilitet.

Så ditt uttryck kommer att vara en enradare:

new Date().toISOString().slice(0, 19).replace('T', ' ');

Den genererade utdata:

2017-06-29 17:54:04

Svar #3

Även om JS har tillräckligt med grundläggande verktyg för att göra detta, är det ganska klumpigt.

/**
 * 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());
};

Svar #4

JS-tidvärde för MySQL

const DATE_FORMATER = require( 'dateformat' );
const datetime = DATE_FORMATER( new Date(), "yyyy-mm-dd HH:MM:ss" );

ELLER

const MOMENT = require( 'moment' );
const datetime = MOMENT().format( 'YYYY-MM-DD  HH:mm:ss.000' );

du kan skicka detta i parametrar, det kommer att fungera.

Svar #5

För godtycklig datumsträng,

// 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 );

Eller en enda rad-lösning,

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 );

Denna lösning fungerar också för Node.js när man använder Timestamp i MySQL.

@Gajus Kuizinas första svar verkar ändra Mozillas toISOString-prototyp

Relaterade artiklar