MySql DateTime स्टाम्प को जावास्क्रिप्ट दिनांक प्रारूप में बदलें


160

क्या कोई जानता है कि मैं एक MySQL datetimeडेटा प्रकार के मूल्य को कैसे ले सकता हूं , जैसे कि YYYY-MM-DD HH:MM:SSया तो इसे पार्स करें या इसे जावास्क्रिप्ट Date()फ़ंक्शन में काम करने के लिए परिवर्तित करें , उदाहरण के लिए: - दिनांक ('YYYY, MM, DD, HH, MM, SS);

धन्यवाद!


फिर यह सब करने के बाद, मुझे पता चला कि जावास्क्रिप्ट डेट्स में तारीखें जोड़ने का आसान तरीका नहीं है ...
कोलोब कैनियन

जवाबों:


418

यहां दिए गए कुछ उत्तर या तो ओवरक्लॉम्पलेट हैं या बस काम नहीं करेंगे (कम से कम, सभी ब्राउज़रों में नहीं)। यदि आप एक कदम पीछे ले जाते हैं, तो आप देख सकते हैं कि MySQL टाइमस्टैम्प में समय का प्रत्येक घटक उसी क्रम में होता है जैसे कि Date()कंस्ट्रक्टर द्वारा दिए गए तर्क ।

सभी की जरूरत है कि स्ट्रिंग पर एक बहुत ही सरल विभाजन है:

// Split timestamp into [ Y, M, D, h, m, s ]
var t = "2010-06-09 13:12:01".split(/[- :]/);

// Apply each element to the Date function
var d = new Date(Date.UTC(t[0], t[1]-1, t[2], t[3], t[4], t[5]));

console.log(d);
// -> Wed Jun 09 2010 14:12:01 GMT+0100 (BST)

निष्पक्ष चेतावनी: यह मानता है कि आपका MySQL सर्वर UTC तिथियों (जो डिफ़ॉल्ट है, और अनुशंसित है कि स्ट्रिंग का कोई समय क्षेत्र घटक नहीं है) का उत्पादन कर रहा है।


3
इस सुरुचिपूर्ण समाधान के लिए बहुत बहुत धन्यवाद! मुझे इसका उपयोग करना पड़ा क्योंकि सफारी प्रतीत नहीं होता है कि एक MySQL समय स्टैम्प स्ट्रिंग जैसे डेट ऑब्जेक्ट को स्वचालित रूप से उत्पन्न कर सकता है। var d = new Date("2010-06-09 13:12:01");। दिलचस्प बात यह है कि, क्रोम को इससे कोई समस्या नहीं है।
अलनफ़ी

और यह सोचने के लिए कि अन्य जवाब कहाँ और अधिक जटिल समाधान सुझाते हैं। आपका बहुत बहुत धन्यवाद!
आरडी

यह गलत उत्तर है। सही उत्तर सिमेन टिमरमैन द्वारा नीचे पोस्ट किया गया है। सभी तिथियां क्रमांकित (संग्रहीत) एक संख्या के रूप में होती हैं जो 1970 यूटीसी के बाद से सेकंड (यूनिक्स समय स्टैम्प के मामले में) या मिलीसेकंड (जावास्क्रिप्ट) के रूप में गिना जाता है। तारीखों के तार में हेरफेर जो इस संख्या का निरूपण है, संसाधनों की बर्बादी है। बस जावास्क्रिप्ट टाइम स्टैम्प (मिलीसेकंड के लिए 1000 से गुणा) को जावास्क्रिप्ट डेट कंस्ट्रक्टर (साइमन टिम्मरमन्स द्वारा सुझाए गए अनुसार) और आपके पास है।
रिन्सब्रेन

1
@ रिनब्रेन: यह गलत जवाब नहीं है, सिर्फ एक जो आपकी आवश्यकताओं के अनुरूप नहीं है। एक अंतर है। क्या होगा यदि कार्यान्वयनकर्ता के पास MySQL क्वेरी (शायद किसी प्रकार की वेब सेवा) करने वाले सर्वर कोड तक कोई पहुंच नहीं है? क्या होगा यदि क्लाइंट साइड कोड को संपादित करना आसान है क्योंकि सर्वर पर इसे बदलने का मतलब अधिक काम होगा? वहाँ कुछ बाइट्स पर बाल बंटवारे का कोई मतलब नहीं है जिसे गज़िंग द्वारा महत्वहीन रूप से प्रस्तुत किया जा सकता है, या एक स्ट्रिंग को विभाजित करने के लिए आवश्यक एक मिलीसेकंड के दस-हज़ारवां भाग।
एंडी ई

4
उह mysql एक समय क्षेत्र का उपयोग करता है और जावास्क्रिप्ट दिनांक निर्माता केवल स्थानीय समय क्षेत्र को स्वीकार करता है, इस प्रकार इस समाधान को 24 घंटे तक गलत तरीके से प्रस्तुत करता new Date(Date.UTC(...))है ... बेहतर है, लेकिन यह मानता है कि mysql utc का उपयोग करता है ... या तो इस तरह से आपकी जरूरत है इससे पहले कि यह एक सही जवाब माना जा सकता है।
14:33 बजे user3338098

64

उत्कृष्ट एंडी ई के उत्तर को जोड़ने के लिए सामान्य उपयोग का एक कार्य हो सकता है:

Date.createFromMysql = function(mysql_string)
{ 
   var t, result = null;

   if( typeof mysql_string === 'string' )
   {
      t = mysql_string.split(/[- :]/);

      //when t[3], t[4] and t[5] are missing they defaults to zero
      result = new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0);          
   }

   return result;   
}

इस तरह से एक MySQL दिनांक / समय के रूप में "YYYY-MM-DD HH:MM:SS"या यहां तक ​​कि संक्षिप्त रूप (केवल दिनांक) को "YYYY-MM-DD"आप कर सकते हैं:

var d1 = Date.createFromMysql("2011-02-20");
var d2 = Date.createFromMysql("2011-02-20 17:16:00");
alert("d1 year = " + d1.getFullYear());

3
आपको new Date(Date.UTC(...))अन्य बुद्धिमान का उपयोग करना चाहिए उत्तर 24 घंटे तक गलत है ...
user3338098

30

मुझे लगता है कि मुझे एक सरल तरीका मिल गया है, जिसका किसी ने उल्लेख नहीं किया है।

MySQL DATETIME कॉलम को यूनिक्स टाइमस्टैम्प के माध्यम से परिवर्तित किया जा सकता है:

SELECT unix_timestamp(my_datetime_column) as stamp ...

हम निर्माणकर्ता का उपयोग करके एक नई जावास्क्रिप्ट दिनांक ऑब्जेक्ट बना सकते हैं, जिसे युग के बाद से मिलीसेकंड की आवश्यकता होती है। यूनिक्स के बाद से unix_timestamp फ़ंक्शन सेकंड देता है, इसलिए हमें 1000 से गुणा करना होगा:

SELECT unix_timestamp(my_datetime_column) * 1000 as stamp ...

परिणामी मान का उपयोग सही जावास्क्रिप्ट तिथि वस्तु को तुरंत करने के लिए किया जा सकता है:

var myDate = new Date(<?=$row['stamp']?>);

उम्मीद है की यह मदद करेगा।


4
हाँ, कुशल आसान तरीका है। लेकिन, मुझे यूनिक्स टाइमस्टैम्प के गुणन (* 1000) ग्राहक पुश करेंगे (जावास्क्रिप्ट में)
Reinsbrain

16

आधुनिक ब्राउज़रों के लिए एक लाइनर (IE10 +):

var d = new Date(Date.parse("2010-06-09 13:12:01"));
alert(d); // Wed Jun 09 2010 13:12:01 GMT+0100 (GMT Daylight Time)

और बस मज़े के लिए, यहाँ एक-लाइनर है जो पुराने ब्राउज़रों (अब तय) में काम करेगा:

new (Function.prototype.bind.apply(Date, [null].concat("2010-06-09 13:12:01".split(/[\s:-]/)).map(function(v,i){return i==2?--v:v}) ));
alert(d); // Wed Jun 09 2010 13:12:01 GMT+0100 (GMT Daylight Time)

1
दूसरा उदाहरण ("एक-लाइनर जो पुराने ब्राउज़रों में काम करेगा") मुझे भविष्य में एक महीने की तारीख देता है। मुझे लगता है कि माह परम शून्य-अनुक्रमित है।
निक्स्पैग

@nickyspag बुमर! इसे मानचित्र () का उपयोग करके निर्धारित किया गया था, लेकिन अब और अधिक सफल नहीं है।
जूल

उत्कृष्ट उत्तर .. वे सभी काम करते थे, विशेष रूप से पहला
डेविड एडोटेय

7

जावास्क्रिप्ट के हाल के संस्करणों में एक ISO8601 प्रारूपित तारीख पढ़ी जाएगी, इसलिए आपको बस इतना करना है कि अंतरिक्ष को 'T' में बदलना है, निम्न में से कुछ ऐसा करना है:

#MySQL
select date_format(my_date_column,'%Y-%m-%dT%T') from my_table;

#PHP
$php_date_str = substr($mysql_date_str,0,10).'T'.substr($mysql_date_str,11,8);

//JavaScript
js_date_str = mysql_date_str.substr(0,10)+'T'+mysql_date_str.substr(11,8);

3

मार्को के समाधान के लिए और भी जोड़ना। मैंने सीधे स्ट्रिंग ऑब्जेक्ट पर प्रोटोटाइप किया।

String.prototype.mysqlToDate = String.prototype.mysqlToDate || function() {
    var t = this.split(/[- :]/);
    return new Date(t[0], t[1]-1, t[2], t[3]||0, t[4]||0, t[5]||0);
};

इस तरह आप सीधे जा सकते हैं:

var mySqlTimestamp = "2011-02-20 17:16:00";
var pickupDate = mySqlTimestamp.mysqlToDate();

3

एक सरल तरीका है, sql टाइमस्टैम्प स्ट्रिंग:

2018-07-19 00:00:00

तिथि () प्राप्त करने के लिए टाइमस्टैम्प का निकटतम प्रारूप निम्नलिखित है, इसलिए "टी" के लिए रिक्त स्थान को बदलें।

var dateString = media.intervention.replace(/\s/g, "T");

"2011-10-10T14: 48: 00"

फिर, दिनांक ऑब्जेक्ट बनाएँ:

var date = new Date(dateString);

परिणाम दिनांक वस्तु होगी:

थू जुल 19 2018 00:00:00 GMT-0300 (होरियो पडरो दे ब्रासीलिया)


2

से एंडी उत्तर , AngularJS के लिए - फ़िल्टर

angular
    .module('utils', [])
.filter('mysqlToJS', function () {
            return function (mysqlStr) {
                var t, result = null;

                if (typeof mysqlStr === 'string') {
                    t = mysqlStr.split(/[- :]/);

                    //when t[3], t[4] and t[5] are missing they defaults to zero
                    result = new Date(t[0], t[1] - 1, t[2], t[3] || 0, t[4] || 0, t[5] || 0);
                }

                return result;
            };
        });

हाय और जयम को धन्यवाद। यह एक टूटी हुई तारीख को ios के लिए बनाए गए कोणीय ऐप में हल किया।
मदिगुरु

1
var a=dateString.split(" ");
var b=a[0].split("-");
var c=a[1].split(":");
var date = new Date(b[0],(b[1]-1),b[2],b[0],c[1],c[2]);

नियमित भाव नहीं जगाने के लिए +1। (अब, अगर हम इसे सिर्फ एक oneliner में बदल सकते हैं और var से छुटकारा पा सकते हैं ...)
T4NK3R

1

सबसे पहले आप जावास्क्रिप्ट की दिनांक वस्तु (वर्ग) को नई विधि 'fromYMD ()' से MySQL के YMD तिथि स्वरूप को जावास्क्रिप्ट प्रारूप में परिवर्तित करके YMD प्रारूप को घटकों में विभाजित कर सकते हैं और इन तिथि घटकों का उपयोग कर सकते हैं:

Date.prototype.fromYMD=function(ymd)
{
  var t=ymd.split(/[- :]/); //split into components
  return new Date(t[0],t[1]-1,t[2],t[3]||0,t[4]||0,t[5]||0);
};

अब आप अपनी खुद की वस्तु को परिभाषित कर सकते हैं (जावास्क्रिप्ट दुनिया में फन):

function DateFromYMD(ymd)
{
  return (new Date()).fromYMD(ymd);
}

और अब आप केवल MySQL तारीख प्रारूप से तारीख बना सकते हैं;

var d=new DateFromYMD('2016-07-24');

0

आप यूनिक्स टाइमस्टैम्प को निर्देशित करने के लिए उपयोग कर सकते हैं:

SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table;

फिर जावास्क्रिप्ट में epoch_time प्राप्त करें, और यह एक साधारण बात है:

var myDate = new Date(epoch_time * 1000);

1000 से गुणा किया जाता है क्योंकि जावास्क्रिप्ट मिलीसेकंड लेता है, और UNIX_TIMESTAMP सेकंड देता है।


-3

Google में त्वरित खोज ने इसे प्रदान किया:

 function mysqlTimeStampToDate(timestamp) {
    //function parses mysql datetime string and returns javascript Date object
    //input has to be in this format: 2007-06-05 15:26:02
    var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
    var parts=timestamp.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
    return new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
  }

स्रोत: http://snippets.dzone.com/posts/show/4132


-4

ऐसा क्यों न करें:

var d = new Date.parseDate( "2000-09-10 00:00:00", 'Y-m-d H:i:s' );

2
parseDate दिनांक ऑब्जेक्ट का JS विधि नहीं है। आखिरकार एक स्थिर पार्स विधि है लेकिन यह केवल 1 तर्क को स्वीकार करता है।
मार्को डेमायो
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.