كيف يمكنني تحويل السلسلة إلى وقت التاريخ باستخدام مواصفات التنسيق في JavaScript؟

StackOverflow https://stackoverflow.com/questions/476105

سؤال

كيف يمكنني تحويل سلسلة إلى كائن وقت وتاريخ في جافا سكريبت عن طريق تحديد سلسلة تنسيق؟

أنا أبحث عن شيء مثل:

var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
هل كانت مفيدة؟

المحلول

وأعتقد أن هذا يمكن أن تساعدك: http://www.mattkruse.com/javascript/date/

وهناك وظيفة getDateFromFormat() التي يمكنك قرص قليلا إلى حل مشكلتك.

تحديث: هناك نسخة محدثة من العينات متوفرة في javascripttoolbox.com

نصائح أخرى

استخدم new Date(dateString) إذا سلسلة متوافق مع Date.parse() . إذا شكل غير متوافق (وأعتقد أنه هو)، لديك لتحليل سلسلة نفسك (يجب أن تكون سهلة مع التعابير العادية) وإنشاء <لأ href = "https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference / Global_Objects / التاريخ "يختلط =" noreferrer "> التاريخ وجوه جديدة مع القيم صريحة للالسنة والشهر واليوم والساعة والدقيقة والثانية.

وChristoph التنويهات باستخدام التعابير المنطقية لمعالجة هذه المشكلة. وإليك ما أنا باستخدام:

var dateString = "2010-08-09 01:02:03";
var reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
var dateArray = reggie.exec(dateString); 
var dateObject = new Date(
    (+dateArray[1]),
    (+dateArray[2])-1, // Careful, month starts at 0!
    (+dateArray[3]),
    (+dateArray[4]),
    (+dateArray[5]),
    (+dateArray[6])
);

وانها بأي حال من الأحوال ذكي، مجرد تكوين التعبير المعتاد وnew Date(blah) لتناسب احتياجاتك.

وتحرير: ربما أكثر قليلا مفهومة في ES6 باستخدام الإتلاف:

let dateString = "2010-08-09 01:02:03"
  , reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
  , [, year, month, day, hours, minutes, seconds] = reggie.exec(dateString)
  , dateObject = new Date(year, month-1, day, hours, minutes, seconds);

ولكن وبكل صدق هذه الأيام I تصل لشيء من هذا القبيل لحظة

توجد

وموعد تطورا الوقت / الروتينية التنسيق في جافا سكريبت.

وسيكون لديك لاستخدام مكتبة خارجية لإخراج التاريخ تنسيق، "جافا سكريبت تنسيق التاريخ" من صارخ Badassery تبدو واعدة جدا.

لتحويل المدخلات، وقد قدمت عدة اقتراحات بالفعل. :)

Moment.js . ومن مكتبة حديثة وقوية تعوض عن وظائف التسجيل محزن جافا سكريبت (أو عدمه).

فقط للحصول على إجابة محدثة هنا، يوجد مكتبة js جيدة في http://www.datejs.com/

Datejs هي مكتبة تاريخ جافا سكريبت مفتوحة المصدر للتحليل والتنسيق والمعالجة.

var temp1 = "";
var temp2 = "";

var str1 = fd; 
var str2 = td;

var dt1  = str1.substring(0,2);
var dt2  = str2.substring(0,2);

var mon1 = str1.substring(3,5);
var mon2 = str2.substring(3,5);

var yr1  = str1.substring(6,10);  
var yr2  = str2.substring(6,10); 

temp1 = mon1 + "/" + dt1 + "/" + yr1;
temp2 = mon2 + "/" + dt2 + "/" + yr2;

var cfd = Date.parse(temp1);
var ctd = Date.parse(temp2);

var date1 = new Date(cfd); 
var date2 = new Date(ctd);

if(date1 > date2) { 
    alert("FROM DATE SHOULD BE MORE THAN TO DATE");
}

مكتبة خارجية هو مبالغة لتحليل واحد أو اثنين من التمور، لذلك جعل وظيفة بلدي باستخدام و أولي ل<ل أ href = "https://stackoverflow.com/a/476117/1801588"> كريستوف لحلول . هنا في وسط أوروبا نحن نادرا ما تستخدم aything لكن شكل وOP، وهذا ما ينبغي أن يكون كافيا لتطبيقات بسيطة تستخدم هنا.

function ParseDate(dateString) {
    //dd.mm.yyyy, or dd.mm.yy
    var dateArr = dateString.split(".");
    if (dateArr.length == 1) {
        return null;    //wrong format
    }
    //parse time after the year - separated by space
    var spacePos = dateArr[2].indexOf(" ");
    if(spacePos > 1) {
        var timeString = dateArr[2].substr(spacePos + 1);
        var timeArr = timeString.split(":");
        dateArr[2] = dateArr[2].substr(0, spacePos);
        if (timeArr.length == 2) {
            //minutes only
            return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]));
        } else {
            //including seconds
            return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]), parseInt(timeArr[2]))
        }
    } else {
        //gotcha at months - January is at 0, not 1 as one would expect
        return new Date(parseInt(dateArr[2]), parseInt(dateArr[1] - 1), parseInt(dateArr[0]));
    }
}

وDate.parse() ذكي إلى حد ما ولكن لا أستطيع أن نضمن أن شكل تحليل بشكل صحيح.

إذا لم يحدث ذلك، كنت قد لتجد شيئا لسد اثنين. المثال هو بسيط جدا (وهي أرقام بحتة) حتى لمسة من REGEX (أو حتى string.split() - قد يكون أسرع). إرفاقها مع بعض parseInt() سوف تسمح لك لجعل بسرعة تاريخ

time = "2017-01-18T17:02:09.000+05:30"

t = new Date(time)

hr = ("0" + t.getHours()).slice(-2);
min = ("0" + t.getMinutes()).slice(-2);
sec = ("0" + t.getSeconds()).slice(-2);

t.getFullYear()+"-"+t.getMonth()+1+"-"+t.getDate()+" "+hr+":"+min+":"+sec

وفقط لإعطاء بلدي 5 سنتات.

وتنسيق التاريخ بلادي dd.mm.yyyy (تنسيق UK) وأيا من الأمثلة المذكورة أعلاه كانوا يعملون بالنسبة لي. وجميع موزعي تدرس ملم واليوم ودد في الشهر.

ولقد وجدت هذه المكتبة: HTTP : //joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/ وعملت، لأنك يمكن أن نقول ترتيب الحقول مثل هذا:

>>console.log(new Date(Date.fromString('09.05.2012', {order: 'DMY'})));
Wed May 09 2012 00:00:00 GMT+0300 (EEST)

وآمل أن يساعد شخص ما.

Moment.js سوف تتعامل مع هذا:

var momentDate = moment('23.11.2009 12:34:56', 'DD.MM.YYYY HH:mm:ss');
var date = momentDate.;

لإرضاء كامل التاريخ.تحليل قم بتحويل السلسلة إلى تنسيق DD-MM-Yyyy كما هو محدد في RFC822 ، إذا كنت تستخدم تحليل YyyyM-MM-DD ، فقد يؤدي أخطاء.

//Here pdate is the string date time
var date1=GetDate(pdate);
    function GetDate(a){
        var dateString = a.substr(6);
        var currentTime = new Date(parseInt(dateString ));
        var month =("0"+ (currentTime.getMonth() + 1)).slice(-2);
        var day =("0"+ currentTime.getDate()).slice(-2);
        var year = currentTime.getFullYear();
        var date = day + "/" + month + "/" + year;
        return date;
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top