JS 날짜 시간을 MySQL datetime으로 변환


124

누구든지 JS dateTime을 MySQL datetime으로 변환하는 방법을 알고 있습니까? 또한 JS datetime에 특정 시간 (분)을 추가 한 다음 MySQL datetime에 전달하는 방법이 있습니까?

답변:


89

JS는이를 수행 할 수있는 충분한 기본 도구를 보유하고 있지만 꽤 투박합니다.

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

변수로 이와 같은 함수를 어떻게 호출합니까?
Catfish

1
@Catfish 특정 날짜를 의미합니까? Date개체를 사용 합니다. new Date().toMysqlFormat()또는 new Date(2014,12,14).toMysqlFormat()또는 무엇이든.
kojiro 2013 년

17
이 대답은 JavaScript가 오래되고 투박한 동안 그날을 보냈습니다. 최신 브라우저를 타겟팅하는 경우 Gajus의 toISOString접근 방식을 권장 합니다.
kojiro

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

또는 더 짧습니다.

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

산출:

2012-06-22 05:40:06

시간대 제어를 포함한 고급 사용 사례의 경우 http://momentjs.com/ 사용을 고려 하십시오 .

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

가벼운 대안을 위해 , https://github.com/taylorhakes/fecha 고려

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

date.getUTCDate 전에 추가 여는 괄호가 있으며 예, 이것이 더 좋습니다.
Adam Lockhart

28
시간대로 인해 문제가 발생합니다
Mr Coder 2014 년

3
시간대 설정을 버리고 유지하는 방법은 무엇입니까?
shapeare

2
시간대를 처리하기 위해 이것과 결합하십시오 : stackoverflow.com/questions/11887934/…
chiliNUT

3
시간대 oneliner로 전체 해결 방법 !! var d = new Date(); d.toISOString().split('T')[0]+' '+d.toTimeString().split(' ')[0];
Paulo Roberto Rosa

78

방법을 사용하면 솔루션이 덜 투박해질 수 있다고 생각합니다. toISOString() 하며 광범위한 브라우저 호환성이 있습니다.

따라서 표현은 한 줄로 표시됩니다.

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

생성 된 출력 :

'2017-06-29 17:54:04'


2
훌륭하게 작동합니다! new Date(1091040026000).toISOString().slice(0, 19).replace('T', ' ');
John

6
여기에서 한 가지 문제가 있습니다.보다 투박한 방법은 js 의 시간대 오프셋 적용한 시간, 일, 월 (짝수 연도) 가져 오는 것 입니다. 당신은 MySQL DATETIME 형식의 기본 UTC 시간을 반환합니다. 대부분의 경우 UTC를 저장하는 것이 더 좋을 수 있으며 두 경우 모두 데이터 테이블이 한 필드에 위치 정보를 제공해야합니다. 또는 현지 시간으로 변환하는 것은 매우 쉽습니다. 사용 (NB는 해당되는 경우 일광 절약 시간도 조정 함). Date... - Date.getTimezoneOffset() * 60 * 1000
마이크 설치류

14

MySQL의 JS 시간 값

var datetime = new Date().toLocaleString();

또는

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

또는

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

이것을 params로 보낼 수 있습니다.


11

임의의 날짜 문자열의 경우

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

또는 단일 라인 솔루션,

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

이 솔루션은 mysql에서 Timestamp를 사용할 때 Node.js에서도 작동합니다.

@Gajus Kuizinas의 첫 번째 답변은 mozilla의 toISOString 프로토 타입을 수정하는 것 같습니다.


4

오래된 DateJS 라이브러리에는 형식화 루틴이 있습니다 ( ".toString ()"을 재정의 함). "Date"방법이 필요한 모든 숫자를 제공하기 때문에 쉽게 직접 할 수 있습니다.


4

@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

4

new Date (). toISOString (). slice (0, 10) + ""+ new Date (). toLocaleTimeString ( 'en-GB');

100 % 작동


0

간단한 JavaScript 날짜 형식 예제를 제공했습니다. 아래 코드를 확인하십시오.

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

momentjs 사용

var date = moment().format('YYYY-MM-DD H:mm:ss');

console.log(date) // 2016-06-23 15:59:08

예는 https://jsfiddle.net/sjy3vjwm/2/을 확인 하십시오.


방금 바닐라 자바 ​​스크립트로 첫 번째 코드를 시도했는데 결과가 2018-4-20 15:11:23입니다. 선행 "0"으로 숫자를 채우지 않습니다. 또한 momentjs에 대해서는 잘 모르지만 "HH"를 1 시간 동안 넣어서 패드를 씌울 필요는 없나요? 그게 당신이 낙선 한 이유일까요? (itwasntme)
Alex a

0

내게 발생하는 JS Date를 SQL datetime 형식으로 변환하는 가장 쉬운 올바른 방법은 이것입니다. 시간대 오프셋을 올바르게 처리합니다.

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

조심하십시오 @Paulo 로베르토의 대답은 (내가 덧글을 남길 수 없습니다) 새로운 일에 턴에서 잘못된 결과를 생성합니다. 예 :

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 

23 일이 아닌 6 월 22 일이 있습니다!


0
var _t = new Date();

UTC 형식을 원하는 경우

_t.toLocaleString('indian', { timeZone: 'UTC' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');

또는

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

특정 시간대에 원하는 경우

_t.toLocaleString('indian', { timeZone: 'asia/kolkata' }).replace(/(\w+)\/(\w+)\/(\w+), (\w+)/, '$3-$2-$1 $4');

0

이 정도 오래 사용하고있어서 제게 매우 도움이됩니다.

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])))
}

그리고 그냥 :

new Date().date()

현재 날짜를 'MySQL 형식'으로 반환합니다.

추가 시간은

new Date().addTime('0:30:0')

30 분이 추가됩니다 .... 등등

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.