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

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

  •  20-08-2019
  •  | 
  •  

سؤال

لقد كنت أحاول تحويل قيمة تاريخ إلى تنسيق أكثر قابلية للقراءة.للقيام بذلك، أحاول تحليل التاريخ باستخدام جافا سكريبت Date.parse() طريقة.ولكن هذا لا يعمل على الإدخال (على سبيل المثال: "2007-09-21T14:15:34.058-07:00") هذا ما املك.الهدف النهائي هو إخراج سلسلة تاريخ مثل "January 30th, 2008 @ 2:15PM".

أيه أفكار؟

هل كانت مفيدة؟

المحلول

http://www.datejs.com/ . وهو مكتبات تاريخ جافا سكريبت مع طريقة Date.parse الموسعة وطريقة Date.parseExact، والتي تمكنك من تحديد سلسلة التنسيق. انظر DateJS APIDocumentation .

نصائح أخرى

ربما يجب عليك استخدام datejs الذي - التي f3lix موصى به، ولكنني شعرت بالملل وقمت بتجميع شيء صغير يقوم بالضبط بما طلبته:

25 سبتمبر 2012:كود نظيف، يسمح بالتنسيق غير الموسع، على سبيل المثال 20120925T164740+0200

1 ديسمبر 2011:إصلاح الخلل في سلسلة الشهر.أغسطس كان في عداد المفقودين

var ISODate = {
  convert :
    function (input){
      if (!(typeof input === "string")) throw "ISODate, convert: input must be a string";
      var d = input.match(/^(\d{4})-?(\d{2})-?(\d{2})[T ](\d{2}):?(\d{2}):?(\d{2})(\.\d+)?(Z|(?:([+-])(\d{2}):?(\d{2})))$/i);
      if (!d) throw "ISODate, convert: Illegal format";
      return new Date(
        Date.UTC(
          d[1], d[2]-1, d[3],
          d[4], d[5], d[6], d[7] || 0 % 1 * 1000 | 0
        ) + (
          d[8].toUpperCase() === "Z" ? 0 :
            (d[10]*3600 + d[11]*60) * (d[9] === "-" ? 1000 : -1000)
        )
      );
    },
  format :
    function(date, utc){
      if (typeof date === "string") date = this.convert(date);
      if (!(date instanceof Date)) throw "ISODate, format: t is not a date object";

      var t={'FullYear':0, 'Month':0, 'Date':0, 'Hours':0, 'Minutes':0, 'Seconds':0};
      for (var key in t) {
        if (t.hasOwnProperty(key)) t[key] = date["get" +(utc ? "UTC" :"") + key]()
      }

      return this.month[t.Month]
        + " "
        + this.ordinal(t.Date)
        + ", "
        + t.FullYear
        + " @ "
        + this.clock12(t.Hours,t.Minutes);
      },
  month:
    [
      "January", "February", "March", "April", "May", "June",
      "July", "August", "September", "October", "November", "December"
    ],
  ordinal:
    function(n) {
      return n+(
        [
          "th", "st", "nd", "rd"
        ][
          (( n % 100 / 10) | 0) === 1 ? 0 : n % 10 < 4 ? n % 10 : 0
        ]
      );
  },
  clock12:
    function(h24, m, s){
      h24%=24;
      var h12 = (h24 % 12) || 12;
      return h12 + ":" +
        (m < 10 ? "0" + m : m) +
        (isFinite(s) ? ":" + (s < 10 ? "0" + s : s ) : "") +
        (h24 < 12 ? "AM" : "PM");
      }
};

مثال:

//Shows the date in the users timezone:
alert(ISODate.format("2007-09-21T14:15:34.058-07:00"));

//Show the date in UTC (Timezone Z, 00:00)
alert(ISODate.format("2007-09-21T14:15:34.058-07:00",true));

توضيح:

يتحول يأخذ سلسلة كمدخل ويعيد كائن تاريخ إذا كان ناجحًا أو يطرح استثناءً إذا لم يكن كذلك.يجب أن تكون السلسلة بأحد التنسيقات التالية:

  • YYYY-MM-DDThh:mm:ss.sZ
  • YYYY-MM-DDThh:mm:ss.sXaa:bb

أين:

  • YYYY هي السنة كعدد صحيح مكون من 4 أرقام
  • MM هو الشهر كعدد صحيح مكون من رقمين
  • DD هو تاريخ الشهر كعدد صحيح مكون من رقمين
  • T هو الحرف T أو المسافة (\x20)
  • hh هي الساعة بتنسيق 24 ساعة، كعدد صحيح مكون من رقمين
  • mm هي الدقيقة كعدد صحيح مكون من رقمين
  • ss.s هو الثاني، إما كعدد صحيح مكون من رقمين أو كنقطة عائمة مكونة من رقمين متبوعين بنقطة تليها رقم واحد أو أكثر.
  • Z هو الحرف Z (يشير إلى المنطقة الزمنية Z، UTC+00:00)
  • X إما علامة زائد (+) أو ناقص (-) لإزاحة الوقت بالتوقيت العالمي المنسق (UTC).
  • aa هي ساعة الإزاحة الزمنية بالتوقيت العالمي المنسق (UTC) كعدد صحيح مكون من رقمين
  • bb هي دقيقة الإزاحة الزمنية لـ ITC كعدد صحيح مكون من رقمين

شكل يأخذ سلسلة بالتنسيق أعلاه أو كائن تاريخ ويعيد سلسلة منسقة على النحو التالي:

  • م د، ص @ ح: مم

أين - M هو الاسم الإنجليزي الكامل للشهر - D هو تاريخ الشهر مع لاحقة ترتيب عددي (1-2 رقم) - Y هو العام (1 أو أكثر من الأرقام) - H هو الساعة بتنسيق 12 ساعة ( 1-2 أرقام) - M هي الدقيقة (2 رقم)

شهر عبارة عن مصفوفة بأسماء الأشهر

ترتيبي هي دالة تأخذ رقمًا كمدخل وتعيد الرقم مع اللاحقة الترتيبية الإنجليزية.

Clock12 هي دالة تستغرق الساعة والدقيقة والثانية بتنسيق 24 ساعة وتحولها إلى سلسلة بتنسيق 12 ساعة أمريكي.ال ثواني هو اختياري.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top