تاريخ استطيع قرائته


السلام عليكم و رحمه الله تعالى و بركاته

اقوم حاليا ببرمجه تطبيق شبيه بقارىء rss ، و كنت بحاجه لتحويل التاريخ الذى كتب فيه الموضوع إلى صيغه يسهل قرائتها بحيث يحول تاريخ قديم مثل Mon Aug 24 2:30:00 2009 إلى منذ ساعه و 30 دقيقه ، بعد بحث بسيط وجدت وظيفه بإسم prettyDate كتبها john resig مطور ال jQuery ، لكنها لن تعمل معى لأنها تعطى الفرق بالدقيقه و الساعه و اليوم و الاسبوع و انا ااريدها ان تعمل من الثانيه حتى السنه ، ثم ان prettyDate مقتصره على تحويل الوحدات إلى اللغه الانجليزيه فقط مثل days و weeks … الخ ، و انا اريد وظيفه تتعامل بالعربيه مع العلم ان العربيه اكثر تعقيدا حيث هناك مفرد و مثنى و جمع و قواعدهم مختلفه مثل يوم ، يومين ، 3 ايام ، 11 يوم ، لاحظ ان يوم تكررت فى المفرد و الجمع ههههههه😀 .

قمت بكتابه وظيفه بإسم dateICanRead تقبل تاريخ فى الماضى كنص او كائن من نوع Date و ترجع لك الفرق بصيغه مقروءه كما توضح الامثله التاليه :

alert("منذ " + dateICanRead("Mon Aug 24 14:50:00 2009"));
/*منذ دقيقتين و 30 ثانيه*/
alert("منذ " + dateICanRead("Sun Aug 23 06:10:00 2009"));
/*منذ يوم و 8 ساعات و 47 دقيقه و 17 ثانيه*/
alert("منذ " + dateICanRead("Aug 11 00:00:00 2008"));
/*منذ سنه و اسبوع و 6 ايام و 14 ساعه و 58 دقيقه و 30 ثانيه*/
alert("منذ " + dateICanRead("Aug 12 00:00:00 2009"));
/*منذ اسبوع و 5 ايام و 15 ساعه 8 دقائق و 38 ثانيه*/

الوظيفه dateICanRead تقبل عباره تانيه و هى عدد الوحدات التى تريدها كما توضح الامثله التاليه :

alert("منذ " + dateICanRead("Aug 11 00:00:00 2008", 1));
/*منذ سنه*/
alert("منذ " + dateICanRead("Aug 11 00:00:00 2008", 2));
 /*منذ سنه و اسبوع*/

يمكنك رؤيه الكود و تحيميل ملف dateICanRead.js من هنا .

الأوسمة: ,

9 تعليقات to “تاريخ استطيع قرائته”

  1. محمد جلال Says:

    هذه الداله فيها خطأ صغير
    وهي أنها لاتفرق ماإذا كان الشهر 31 يوم أو 30 أو 28 أو 29
    وجربها ولاتبخل علينا بالنتيجه

    • mostafa farghaly Says:

      هذه النقطه كانت فى اعتبارى يا محمد ، يمكننى معرفه ذلك لكنى لم ارد ان ازيد الامر تعقيدا داخل كل loop و ليس هذا الذى اريده ، و اخترت الرقم 30 حتى يكون وسطا بين الارقام التى ذكرتها كلها ، و لنفرض ان الشهر 28 يوم ، لن تفرق مع المستخدم ان قلت له منذ شهر او منذ 28 يوم لأنه لا يهمه فى حالتى علم التاريخ بالظبط ، يريد معرفه ما مدى قدم او حدث الموضوع لأن هناك مواضيع منذ ساعه و الاخرى منذ اسبوع و الاخرى منذ 3 دقائق المهم ان يكون هناك context قريب جدا من الزمن الحقيقى ، اذا اراد معرفه التوقيت بالظبط يمكنك المرور على الرابط مثلا سيظهر له tooltip بالتاريخ الحقيقى الذى دخل الوظيفه dateICanRead

  2. عمر الدليمي Says:

    روعة يا مصطفى :)،

    • mostafa farghaly Says:

      @عمر فينك يا راجل بقالى كتير اوى مشوفتكش ، و الف مبروك على التعيين فى شركه SIT و على الخبره اللى هتكتسبها من الاحتكاك مع فريق العمل و مشاريع حقيقيه .

  3. almhajer Says:

    شكرا جزيلا

  4. abd Says:

    يعطيك العافة اخ مصطفى
    ان تاتي متاخرا خير من ان لا تاتي ابدا
    رابط ملف السكريبت لا يعمل
    ارجو التصحيح اذا كان لا يوجد اي مانع عندك

    • mostafa farghaly Says:


      /*
      * dateICanRead.js
      * Copyright (c) 2009 Mostafa Farghaly (keepondev.com)
      * I made it for you to use it, modify it, sell it or bello weshrab mayeto h3h3h3
      */

      // accept date string representation or javascript date object in the past
      // and return readable format in Arabic
      // and accepnt second parameter for the units count
      // see https://keepondev.wordpress.com/2009/08/24/dateicanread-js/
      function dateICanRead(date, unitsCount){
      var unitsCount = unitsCount || 7;
      var givenDate = (date.constructor == Date) ? date : new Date(date);
      var now = new Date();
      var diff = (now.getTime() - givenDate.getTime()) / 1000;
      if (isNaN(diff) || diff < 0) {
      //return;
      // quick fix to returning undefined
      return "لحظات"
      }

      var result = "";

      var second = [1, "ثانيه", "ثانيتين", "ثوانى"];
      var minute = [60, "دقيقه", "دقيقتين", "دقائق"];
      var hour = [3600, "ساعه", "ساعتين", "ساعات"];
      var day = [86400, "يوم", "يومين", "ايام"];
      var week = [604800, "اسبوع", "اسبوعين", "اسابيع"];
      var month = [2592000, "شهر", "شهرين", "شهور"];
      var year = [31536000, "سنه", "سنتين", "سنين"];

      var timeUnits = [year, month, week, day, hour, minute, second];

      for (var i = 0, len = timeUnits.length; i 0) {
      unitsCount--
      // build string :
      result += (result.length > 0) ? " و " : "";
      // if 1,2 remove number yawmayn not 2 yawmayn
      result += (divResult yawm (no number)
      result += (divResult == 1) ? unit[1]
      // if 2 => yawmayn (no number)
      : (divResult == 2) ? unit[2]
      //if 3:9 ayam
      : (divResult = 3) ? unit[3]
      // if 11:.... yawm
      : unit[1];

      if (!unitsCount) {
      break;
      }
      // the difference for the next unit
      diff = diff % unit[0];

      }
      // else try the next unit
      continue;
      }

      return result;
      };

  5. abd Says:

    الف شكر الك والله يعطيك العافة

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s


%d مدونون معجبون بهذه: