মাইএসকিউএল ডেটটাইম স্ট্যাম্পটিকে জাভাস্ক্রিপ্টের তারিখের ফর্ম্যাটে রূপান্তর করুন


160

কেউ কীভাবে জানে যে আমি কীভাবে একটি মাইএসকিউএল datetimeডেটা টাইপ মান নিতে পারি , যেমন YYYY-MM-DD HH:MM:SSএবং হয় পার্স করতে বা এটিকে জাভাস্ক্রিপ্টের Date()ফাংশনে কাজ করতে রূপান্তর করতে , উদাহরণস্বরূপ: - তারিখ ('ওয়াইওয়াইওয়াই, এমএম, ডিডি, এইচ এইচ, এমএম, এসএস);

ধন্যবাদ!


তারপরে এগুলি করার পরেও আমি দেখতে পাচ্ছি যে জাভাস্ক্রিপ্ট তারিখগুলির তারিখগুলি যুক্ত করার সহজ উপায় নেই ...
কলব ক্যানিয়ন

উত্তর:


418

এখানে প্রদত্ত কয়েকটি উত্তর হ'ল অতি জটিল বা কেবল কার্যকর হবে না (কমপক্ষে, সমস্ত ব্রাউজারে নয়)। আপনি যদি একটি পদক্ষেপ পিছনে নিয়ে যান, আপনি দেখতে পাচ্ছেন যে মাইএসকিউএল টাইমস্ট্যাম্পে কনস্ট্রাক্টরের প্রয়োজনীয় আর্গুমেন্টগুলির সাথে একই ক্রমের প্রতিটি অংশ রয়েছে 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)

যথাযথ সতর্কতা: এটি ধরে নিয়েছে যে আপনার মাইএসকিউএল সার্ভারটি ইউটিসি তারিখগুলি আউটপুট দিচ্ছে (যা পূর্বনির্ধারিত এবং স্ট্রিংয়ের কোনও টাইমজোন উপাদান না থাকলে প্রস্তাবিত)।


3
এই মার্জিত সমাধানের জন্য আপনাকে অনেক ধন্যবাদ! আমাকে এটি ব্যবহার করতে হয়েছিল কারণ সাফারি কোনও মাইএসকিউএল টাইম স্ট্যাম্প স্ট্রিং থেকে উদাহরণস্বরূপ কোনও তারিখ অবজেক্ট স্বয়ংক্রিয়ভাবে তৈরি করতে সক্ষম হবে বলে মনে হচ্ছে না। var d = new Date("2010-06-09 13:12:01");। আকর্ষণীয়ভাবে যদিও ক্রোমের এতে কোনও সমস্যা নেই।
অ্যালানাফি

এবং ভাবতে হবে যে অন্যান্য উত্তর যেখানে আরও জটিল সমাধানের পরামর্শ দেয়। অনেক ধন্যবাদ!
আরডি

এটি ভুল উত্তর। সঠিক উত্তরটি নিচে সাইম্যান টিমারম্যানস পোস্ট করেছেন। সমস্ত তারিখগুলি এমন একটি সংখ্যা হিসাবে সিরিয়ালযুক্ত (সঞ্চিত) হয় যা সেকেন্ডে (ইউনিক্স টাইম স্ট্যাম্পের ক্ষেত্রে) বা মিলিসেকেন্ডগুলি (জাভাস্ক্রিপ্ট) গণনা করা হয় 1970 ইউটিসি থেকে। এই সংখ্যার বিশৃঙ্খলা উপস্থাপনা যে তারিখের স্ট্রিংগুলি ব্যবহার করে তা হ'ল সম্পদ অপচয় করা। জাভাস্ক্রিপ্ট তারিখ নির্মাণকারীকে (সিমেন টিমারম্যানসের পরামর্শ অনুসারে) কেবল ইউনিক্স টাইম স্ট্যাম্পটি (মিলি সেকেন্ডের জন্য 1000 দ্বারা গুণিত) পাস করুন এবং আপনার কাছে এটি রয়েছে।
রিইনসাব্রাইন

1
@ রেইনসব্রাহিন: এটি ভুল উত্তর নয়, কেবল একটি যা আপনার প্রয়োজনীয়তার সাথে খাপ খায় না। একটি পার্থক্য আছে। মাইএসকিউএল কোয়েরি (সম্ভবত কোনওরকম ওয়েব পরিষেবা) সম্পাদনকারী সার্ভার কোডটিতে যদি প্রয়োগকারীটির অ্যাক্সেস না থাকে তবে কী হবে? যদি ক্লায়েন্টের সাইড কোডটি সম্পাদনা করা সহজ হয় কারণ এটি সার্ভারে পরিবর্তন করা আরও বেশি কাজের কাজ করে? গিজিপিংয়ের মাধ্যমে তুচ্ছ হিসাবে উপস্থাপন করা যেতে পারে বা স্ট্রিংকে বিভক্ত করার জন্য মিলিসেকেন্ডের দশ-সহস্র ভাগ হতে পারে এমন কয়েকটি বাইটের উপরে বিভক্ত কেশ নেই।
অ্যান্ডি ই

4
উহ মাইএসকিএল এক সময় অঞ্চল ব্যবহার করে এবং জাভাস্ক্রিপ্ট তারিখ নির্মাতা কেবল স্থানীয় সময় অঞ্চলকে এইভাবে 24 ঘন্টা পর্যন্ত এই সমাধানটি ভুলভাবে উপস্থাপন করে ... এটি new Date(Date.UTC(...))আরও ভাল, তবে ধরে নেওয়া যায় যে মাইএসকিএল ইউটিসি ব্যবহার করে ... উভয় উপায়ে এটি হওয়া দরকার এর আগে বিবেচিত একটি সঠিক উত্তর হিসাবে বিবেচনা করা যেতে পারে।
ব্যবহারকারী 3338098

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

ফর্মটিতে একটি মাইএসকিউএল তারিখ / সময় দেওয়া হয়েছে "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 ঘন্টা অবধি ভুল ...
ব্যবহারকার 3338098

30

আমি মনে করি আমি সম্ভবত একটি সহজ উপায় খুঁজে পেয়েছি, যা কেউ উল্লেখ করেনি।

একটি মাইএসকিউএল DATETIME কলামটি ইউনিক্স টাইমস্ট্যাম্পের মাধ্যমে রূপান্তরিত হতে পারে:

SELECT unix_timestamp(my_datetime_column) as stamp ...

মহাকাশকাল থেকে মিলি সেকেন্ডের প্রয়োজন এমন কনস্ট্রাক্টর ব্যবহার করে আমরা একটি নতুন জাভাস্ক্রিপ্ট তারিখ অবজেক্ট তৈরি করতে পারি। ইউনিক্স_টাইমস্ট্যাম্প ফাংশনটি যুগের পর থেকে কয়েক সেকেন্ড ফিরে আসে, সুতরাং আমাদের 1000 দিয়ে গুণ করতে হবে:

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

ফলস্বরূপ মানটি সঠিক জাভাস্ক্রিপ্টের তারিখ অবজেক্টটি ইনস্ট্যান্ট করতে সরাসরি ব্যবহার করা যেতে পারে:

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

আশাকরি এটা সাহায্য করবে.


4
হ্যাঁ, কার্যকর সহজ উপায়। তবে আমি ইউনিক্স টাইমস্ট্যাম্পের (* 1000) কে ক্লায়েন্টের উপরে (জাভাস্ক্রিপ্টে)
চাপিয়ে দেব

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
দ্বিতীয় উদাহরণ ("ওয়ান-লাইনার যা পুরানো ব্রাউজারগুলিতে কাজ করবে") আমাকে ভবিষ্যতে এক মাসের তারিখ দেয়। আমি মনে করি পরম মাসটি শূন্য-সূচকযুক্ত।
নিকিসপ্যাগ

@ নিকিসপ্যাগ বোমার! এটিকে মানচিত্র () ব্যবহার করে স্থির করে তবে সাফল্যের মতো আর নয়।
আলেম্ব

দুর্দান্ত উত্তর .. তারা সবাই কাজ করেছে, বিশেষ করে প্রথম
ডেভিড অ্যাডোটে

7

জাভাস্ক্রিপ্টের সাম্প্রতিক সংস্করণগুলি একটি ISO8601 ফর্ম্যাটেড তারিখটি পড়বে, সুতরাং আপনাকে যা করতে হবে তা হল নিম্নলিখিতগুলির মতো কিছু করে স্থানটি 'টি' তে পরিবর্তন করা:

#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

একটি সহজ উপায়, বর্গক্ষেত্র টাইমস্ট্যাম্প স্ট্রিং রয়েছে:

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

হাই ও জয়মকে ধন্যবাদ। এটি আইওএসের জন্য আমি তৈরি একটি কৌণিক অ্যাপে একটি ভাঙ্গা তারিখ সমাধান করেছে resolved
মিডিয়াগুরু

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। (এখন, আমরা যদি এটি কেবলমাত্র অনিয়নে পরিণত করতে পারি এবং যুদ্ধগুলি থেকে মুক্তি পেতে পারি ...)
T4NK3R

1

প্রথমে আপনি জাভাস্ক্রিপ্টের তারিখ অবজেক্ট (বর্গ) মাইএসকিউএল এর ওয়াইএমডি তারিখের ফর্ম্যাটটিকে জাভাস্ক্রিপ্ট ফর্ম্যাটে উপাদানগুলিতে বিভক্ত করে এবং এই তারিখের উপাদানগুলি ব্যবহার করে রূপান্তর করতে নতুন পদ্ধতি 'ওয়াইএমডি ()' দিতে পারেন:

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

এবং এখন আপনি কেবল মাইএসকিউএল তারিখের ফর্ম্যাট থেকে তারিখ তৈরি করতে পারেন;

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

0

আপনি পরিচালনা করতে ইউনিক্স টাইমস্ট্যাম্প ব্যবহার করতে পারেন:

SELECT UNIX_TIMESTAMP(date) AS epoch_time FROM table;

তারপরে জাভাস্ক্রিপ্টে যুগের সময়টি পান এবং এটি একটি সাধারণ বিষয়:

var myDate = new Date(epoch_time * 1000);

1000 দ্বারা গুণ করা কারণ জাভাস্ক্রিপ্টটি মিলি সেকেন্ড নেয়, এবং UNIX_TIMESTAMP সেকেন্ড দেয়।


-3

গুগলে একটি দ্রুত অনুসন্ধান এটি সরবরাহ করেছে:

 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
পার্সেটেট তারিখ অবজেক্টের জেএস পদ্ধতি নয়। শেষ পর্যন্ত একটি স্থির বিশ্লেষণ পদ্ধতি রয়েছে তবে এটি কেবল 1 টি আর্গুমেন্ট গ্রহণ করে।
মার্কো ডেমাইও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.