जेएस दिनांक समय को MySQL डेटाइम में बदलें


124

क्या किसी को पता है कि जेएस डेटाइम को MySQL डेटाइम में कैसे बदलना है? इसके अलावा जेएस डाटटाइम के लिए एक विशिष्ट संख्या में मिनट जोड़ने और फिर इसे MySQL डाटटाइम करने के लिए एक रास्ता है?

जवाबों:


89

जबकि जेएस के पास ऐसा करने के लिए पर्याप्त बुनियादी उपकरण हैं, यह बहुत अच्छा है।

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

आप चर के साथ इस तरह के एक समारोह को कैसे कहते हैं?
कैटफ़िश

1
@ कैटफ़िश आप एक विशिष्ट तारीख के साथ मतलब है? आप किसी Dateऑब्जेक्ट का उपयोग करें । new Date().toMysqlFormat()या new Date(2014,12,14).toMysqlFormat()जो भी हो।
कोजिरो

17
इस उत्तर में इसका दिन था, जबकि जावास्क्रिप्ट पुराना था और क्लंकी था। यदि आप एक आधुनिक ब्राउज़र को लक्षित करते हैं, तो मैं गजस के toISOStringदृष्टिकोण की सलाह देता हूं
कोजिरो

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 से पहले एक अतिरिक्त ओपनिंग कोष्ठक है, और हाँ यह बेहतर है।
एडम लॉकहर्ट

28
यह टाइमजोन के कारण समस्या देगा
श्री कोडर

3
यह टाइमजोन सेटिंग को दूर फेंकता है, इसे कैसे रखा जाए?

2
कॉम्बो
टाइमजोन

3
समयक्षेत्र oneliner के साथ पूर्ण समाधान !! var d = new Date(); d.toISOString().split('T')[0]+' '+d.toTimeString().split(' ')[0];
पॉलो रॉबर्टो रोजा

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', ' ');
जॉन

6
ग्रेट, केवल यहां एक मुद्दा: अधिक क्लंकी तरीके js के टाइम ज़ोन ऑफसेट के आवेदन के बाद घंटे, दिन, महीने (यहां तक ​​कि वर्ष) प्राप्त कर रहे होंगे । जबकि आपका MySQL DATETIME प्रारूप में अंतर्निहित UTC समय वापस आ जाता है। ज्यादातर मामलों में UTC को संग्रहीत करना बेहतर हो सकता है, और किसी भी स्थिति में आपकी डेटा तालिका को संभवतः एक क्षेत्र में स्थान की जानकारी देनी चाहिए। वैकल्पिक रूप से, स्थानीय समय में बदलने के लिए बहुत आसान है: उपयोग (एनबी भी डेलाइट सेविंग टाइम जहां लागू हो) के लिए समायोजित करता है। 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' );

आप इसे काम कर सकते हैं।


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 में टाइमस्टैम्प का उपयोग करते समय Node.js के लिए भी काम करता है।

@ गजस कुइजिनास का पहला उत्तर मोज़िला के टिज़ोट्रिंग प्रोटोटाइप को संशोधित करना प्रतीत होता है


4

आदरणीय DateJS पुस्तकालय में एक नियमित रूटीन है (यह ".toString ()") को ओवरराइड करता है। आप अपने आप को बहुत आसानी से कर सकते हैं क्योंकि "तिथि" विधियाँ आपको उन सभी नंबरों को देती हैं जिनकी आपको आवश्यकता है।


4

पूर्ण वर्कअराउंड (टाइमज़ोन को मंटेन करने के लिए) @ गजस उत्तर अवधारणा का उपयोग करना:

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


0

मैंने सरल जावास्क्रिप्ट तिथि प्रारूप उदाहरण दिए हैं कृपया बलो कोड की जांच करें

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

क्षणिका का उपयोग करना

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" के साथ संख्याओं को नहीं भर रहे हैं। इसके अलावा, मैं गतिज के बारे में नहीं जानता, लेकिन क्या आपको घंटे के लिए "एचएच" नहीं डालना है ताकि वह इसे पैड कर सके? शायद इसीलिए आपको वोट दिया गया? (itwasntme)
एलेक्स

0

JS डेट को SQL डेटाइम फॉर्मेट में बदलने का सबसे आसान सही तरीका है जो मेरे साथ होता है। यह टाइमजोन ऑफसेट को सही ढंग से संभालता है।

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 

हमें २३ के बजाय २२ जून मिल गया है!


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 मिनट जोड़ देगा .... और इसी तरह

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.