javascript - ماهو - شرح جافا سكريبت




أين يمكنني العثور على وثائق حول تنسيق تاريخ في JavaScript؟ (20)

لاحظت أن وظيفة new Date() الخاصة بـ JavaScript ذكية للغاية في قبول التواريخ بتنسيقات متعددة.

Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")

لم أتمكن من العثور على وثائق في أي مكان تظهر جميع تنسيقات السلسلة الصحيحة أثناء استدعاء دالة new Date() .

هذا هو لتحويل سلسلة إلى تاريخ. إذا نظرنا إلى الجانب المقابل ، أي تحويل كائن تاريخ إلى سلسلة ، حتى الآن كنت تحت الانطباع بأن جافا سكريبت لا يحتوي على واجهة برمجة تطبيقات داخلية لتنسيق كائن تاريخ في سلسلة.

ملاحظة المحرر: النهج التالي هو محاولة السائل التي عملت على متصفح معين ولكنها لا تعمل بشكل عام. شاهد الإجابات على هذه الصفحة لترى بعض الحلول الفعلية.

اليوم ، لعبت مع طريقة toString() على كائن التاريخ ، ومن المفاجئ أنها تخدم غرض تنسيق التاريخ على السلاسل.

var d1 = new Date();
d1.toString('yyyy-MM-dd');       //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy')  //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome

هنا أيضا لم أتمكن من العثور على أي وثائق حول جميع الطرق التي يمكننا بها تنسيق كائن التاريخ في سلسلة.

أين توجد الوثائق التي تسرد محددات التنسيق التي يدعمها كائن Date() ؟


أين توجد الوثائق التي تسرد محددات التنسيق التي يدعمها كائن Date() ؟

تعثرت عبر هذا اليوم ، وكان مندهشًا تمامًا أن أحداً لم يأخذ الوقت الكافي للإجابة على هذا السؤال البسيط. صحيح ، هناك العديد من المكتبات هناك للمساعدة في التلاعب في التاريخ. بعضها أفضل من غيرها. لكن هذا لم يكن السؤال المطروح.

AFAIK ، جافا سكريبت الخالص لا يدعم محددات الأشكال بالطريقة التي أشرت بها إلى رغبتك في استخدامها . ولكنه يدعم أساليب تنسيق التواريخ و / أو الأوقات ، مثل .toLocaleDateString() و .toLocaleTimeString() و .toUTCString() .

إن مرجع كائن Date أستخدمه بشكل متكرر هو على w3schools.com/jsref/jsref_obj_date.asp (لكن بحث Google سريع سيكشف الكثير من w3schools.com/jsref/jsref_obj_date.asp التي قد تلبي احتياجاتك بشكل أفضل).

لاحظ أيضًا أن قسم خصائص كائن التاريخ يوفر رابطًا إلى prototype ، والذي يوضح بعض الطرق التي يمكنك بها تمديد كائن التاريخ باستخدام طرق مخصصة. كان هناك بعض الجدل في مجتمع جافا سكريبت على مر السنين حول ما إذا كان هذا هو أفضل الممارسات أم لا ، وأنا لا أدافع عنها أو ضدها ، فقط أشرت إلى وجودها.


الجواب القصير

لا توجد وثائق "شاملة" تلبيها جافا سكريبت ؛ كل متصفح يحتوي على javascript هو تطبيق بالفعل. ومع ذلك ، هناك معيار أن معظم المتصفحات الحديثة تميل إلى اتباع ، وهذا هو معيار EMCAScript. سوف تتخذ السلاسل القياسية ECMAScript ، الحد الأدنى ، تنفيذًا معدلاً لتعريف ISO 8601.

بالإضافة إلى ذلك ، هناك مجموعة قياسية ثانية من IETF تميل المتصفحات إلى متابعتها أيضًا ، وهو تعريف الطوابع الزمنية التي تم إنشاؤها في RFC 2822. يمكن العثور على الوثائق الفعلية في قائمة المراجع في الأسفل.

من هذا يمكنك توقع الوظائف الأساسية ، ولكن ما يجب أن يكون "لا يجب أن يكون". سوف أتعمق قليلاً في هذا الأمر من الناحية الإجرائية ، حيث يبدو أن ثلاثة أشخاص فقط هم الذين أجابوا على السؤال (سكوت ، goofballLogic ، و peller بالتحديد) ، والتي ، بالنسبة لي ، تشير إلى أن معظم الناس ليسوا على دراية بما يحدث بالفعل عندما إنشاء كائن التاريخ.

الجواب طويل

أين توجد الوثائق التي تسرد محددات التنسيق التي يدعمها كائن Date ()؟


للإجابة على السؤال ، أو حتى البحث عن الإجابة على هذا السؤال ، يجب أن تعرف أن javascript ليست لغة جديدة. إنه في الواقع تطبيق ECMAScript ، ويتبع معايير ECMAScript (لكن لاحظ أن javascript قد سبق في الواقع تاريخ سابق لتلك المعايير ؛ معايير EMCAScript مبنية على التطبيق المبكر لـ LiveScript / JavaScript). معيار ECMAScript الحالي هو 5.1 (2011) ؛ في الوقت الذي طُلب فيه السؤال أصلاً (يونيو 2009) ، كان المعيار 3 (تم التخلي عن 4) ، ولكن تم إصدار 5 بعد فترة وجيزة من المنصب في نهاية عام 2009. وهذا يجب أن يحدد مشكلة واحدة ؛ ما الذي قد يتبعه تطبيق جافا سكريبت المعياري ، قد لا يعكس ما هو موجود بالفعل ، لأن أ) تطبيق لمعيار معين ، ب) ليست جميع تطبيقات المعيار متآزِرة ، و ج) لا يتم تحرير الوظيفة في تزامن مع معيار جديد كما د) التنفيذ هو عمل مستمر في التقدم

بشكل أساسي ، عند التعامل مع جافا سكريبت ، أنت تتعامل مع مشتق (javascript خاص بالمتصفح) لتنفيذ (javascript نفسه). على سبيل المثال ، تقوم أداة V8 من Google بتطبيق ECMAScript 5.0 ، لكن JScript الخاص بـ Internet Explorer لا تحاول مطابقة أي معيار ECMAScript ، إلا أن Internet Explorer 9 لا يتوافق مع ECMAScript 5.0.

عندما يتم تمرير وسيطة واحدة إلى تاريخ جديد () ، فإنه يلقي هذه الوظيفة النموذج الأولي:

new Date(value)

عندما يتم تمرير وسيطتين أو أكثر إلى تاريخ جديد () ، فإنه يلقي هذه الوظيفة النموذج الأولي:

new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )


يجب أن تبدو هاتان الوظيفتان مألوفتين ، لكن هذا لا يجيب على الفور عن سؤالك ، وما يحدد كمثال "صيغة تاريخ" مقبولة يتطلب مزيدًا من التوضيح. عندما تقوم بتمرير سلسلة إلى تاريخ جديد () ، فإنها ستستدعي النموذج الأولي (لاحظ أني أستخدم الكلمة النموذجية بشكل فضفاض ؛ قد تكون الإصدارات وظائف فردية ، أو قد تكون جزءًا من بيان شرطي في وظيفة واحدة) تاريخ جديد (قيمة) مع السلسلة الخاصة بك كوسيطة لمعلمة "القيمة". سوف تتحقق هذه الوظيفة أولاً من كونها رقمًا أو سلسلة. يمكن العثور على وثائق هذه الوظيفة هنا:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

من هذا ، يمكننا استنتاج أنه للحصول على تنسيق السلسلة المسموح به للتاريخ الجديد (القيمة) ، يجب علينا النظر إلى الطريقة Date.parse (سلسلة). يمكن العثور على وثائق هذه الطريقة هنا:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

ويمكننا أيضًا استنتاج أن التواريخ من المتوقع أن تكون في تنسيق ISO 8601 Extended المعدل ، كما هو محدد هنا:

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

ومع ذلك ، يمكننا أن نتعرف من التجربة على أن كائن تاريخ javascript يقبل تنسيقات أخرى (يتم فرضها من خلال وجود هذا السؤال في المقام الأول) ، وهذا أمر مقبول لأن ECMAScript يسمح بتنسيقات محددة للتنفيذ. ومع ذلك ، لا يزال ذلك لا يجيب على السؤال عن الوثائق المتوفرة في التنسيقات المتوفرة ، ولا ما هي التنسيقات المسموح بها بالفعل. سننظر في تنفيذ جافا سكريبت من Google ، الإصدار 8 ؛ يرجى ملاحظة أنني لا أقترح أن هذا هو محرك جافا سكريبت "الأفضل" (كيف يمكن للمرء أن يعرف "أفضل" أو حتى "جيد") ولا يمكن لأحد أن يفترض أن التنسيقات المسموح بها في V8 تمثل جميع التنسيقات المتاحة اليوم ، لكنني أعتقد أنها عادلة لنفترض أنها تتبع التوقعات الحديثة.

جوجل V8 ، date.js ، DateConstructor

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

بالنظر إلى دالة DateConstructor ، يمكننا أن نستنتج أننا بحاجة إلى إيجاد وظيفة DateParse ؛ ومع ذلك ، تجدر الإشارة إلى أن "السنة" ليست السنة الفعلية وأنها مجرد مرجع لمعلمة "السنة".

جوجل V8 ، date.js ، DateParse

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

هذا يستدعي٪ DateParseString ، وهو فعلياً مرجع دالة وقت التشغيل لدالة C ++. يشير إلى التعليمة البرمجية التالية:

جوجل V8 ، runtime.cc ، ٪ DateParseString

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

استدعاء الدالة التي نحن مهتمون بها في هذه الوظيفة هو لـ DateParser :: Parse ()؛ تجاهل المنطق المحيط بمكالمات الوظيفة هذه ، هذه مجرد عمليات تحقق لتتوافق مع نوع التشفير (ASCII و UC16). يتم تعريف DateParser :: Parse هنا:

Google V8 و dateparser-inl.h و DateParser :: Parse

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

هذه هي الوظيفة التي تعرف في الواقع ما هي الصيغ التي تقبلها. وبشكل أساسي ، يتحقق من معيار EMCAScript 5.0 ISO 8601 وإذا لم يكن متوافقًا مع المعايير ، فإنه سيحاول بناء التاريخ استنادًا إلى التنسيقات القديمة. بعض النقاط الأساسية بناءً على التعليقات:

  1. يتم تجاهل الكلمات قبل الرقم الأول غير معروفة إلى المحلل اللغوي.
  2. يتم تجاهل النص المقسم.
  3. يتم تفسير الأرقام غير الموقعة متبوعة بـ ":" على أنها "مكون زمني".
  4. يتم تفسير الأرقام غير الموقعة متبوعة بـ "." على أنها "مكون زمني" ، ويجب أن يتبعها عدد من الميلي ثانية.
  5. يتم تفسير الأرقام التي تم التوقيع عليها متبوعة بالساعة أو بالساعة (على سبيل المثال +5: 15 أو +0515) على أنها المنطقة الزمنية.
  6. عند التصريح بالساعة والدقيقة ، يمكنك استخدام "hh: mm" أو "hhmm".
  7. يتم تفسير الكلمات التي تشير إلى منطقة زمنية على أنها منطقة زمنية.
  8. يتم تفسير جميع الأرقام الأخرى على أنها "مكونات التاريخ".
  9. يتم تفسير جميع الكلمات التي تبدأ بالأرقام الثلاثة الأولى من الشهر بالشهر.
  10. يمكنك تحديد الدقائق والساعات معًا في أي من التنسيقين: "hh: mm" أو "hhmm".
  11. لا يُسمح بالرموز مثل "+" و "-" و "لا مثيل لها") "بعد معالجة رقم.
  12. تتم معالجة العناصر التي تطابق تنسيقات متعددة (على سبيل المثال 1970-01-01) كسلسلة متوافقة مع معيار ISO EMCAScript 5.0 ISO 8601.

لذا يجب أن يكون هذا كافيًا لإعطائك فكرة أساسية عما يجب توقعه عندما يتعلق الأمر بتمرير سلسلة إلى كائن تاريخ. يمكنك التوسع في هذا الأمر من خلال النظر في المواصفات التالية التي تشير إليها Mozilla على شبكة مطوري Mozilla (المتوافقة مع الطوابع الزمنية IETF RFC 2822):

http://tools.ietf.org/html/rfc2822#page-14

تذكر Microsoft Developer Network بالإضافة إلى ذلك معيارًا إضافيًا لعنصر التاريخ: ECMA-402 ، مواصفات API ECMAScript Internationalization ، وهو مكمل لمعيار ECMAScript 5.1 (والمستقبل). يمكن العثور على ذلك هنا:

http://www.ecma-international.org/ecma-402/1.0/

على أي حال ، من المفترض أن يساعد هذا في إبراز أنه لا يوجد "توثيق" يمثل جميع تطبيقات جافا سكريبت عالميًا ، ولكن لا يزال هناك ما يكفي من الوثائق المتاحة لإدراك معقول ما هي السلاسل المقبولة بالنسبة لكائن التاريخ. تماما السؤال المحملة عندما تفكر في ذلك ، نعم؟ : P

المراجع

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

http://tools.ietf.org/html/rfc2822#page-14

http://www.ecma-international.org/ecma-402/1.0/

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

مصادر

developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

http://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx


All browsers

The most reliable way to format a date with the source format you're using, is to apply the following steps :

  1. Use new Date() to create a Date object
  2. Use .getDate() , .getMonth() and .getFullYear() to get respectively the day, month and year
  3. Paste the pieces together according to your target format

مثال:

var date = '2015-11-09T10:46:15.097Z';

function format(input) {
    var date = new Date(input);
    return [
       ("0" + date.getDate()).slice(-2),
       ("0" + (date.getMonth()+1)).slice(-2),
       date.getFullYear()
    ].join('/');
}

document.body.innerHTML = format(date); // OUTPUT : 09/11/2015

(See also this Fiddle ).

Modern browsers only

You can also use the built-in .toLocaleDateString method to do the formatting for you. You just need pass along the proper locale and options to match the right format, which unfortunately is only supported by modern browsers (*) :

var date = '2015-11-09T10:46:15.097Z';

function format(input) {
    return new Date(input).toLocaleDateString('en-GB', {
        year: 'numeric',
        month: '2-digit',
        day: '2-digit'
    });
}

document.body.innerHTML = format(date); // OUTPUT : 09/11/2015

(See also this Fiddle ).

(*) According to the MDN , "Modern browsers" means Chrome 24+, Firefox 29+, IE11, Edge12+, Opera 15+ & Safari nightly build


أحب 10 طرق لتنسيق الوقت والتاريخ باستخدام جافا سكريبت والعمل مع التواريخ .

في الأساس ، لديك ثلاث طرق وعليك الجمع بين السلاسل لنفسك:

getDate() // Returns the date
getMonth() // Returns the month
getFullYear() // Returns the year

مثال:

<script type="text/javascript">
    var d = new Date();
    var curr_date = d.getDate();
    var curr_month = d.getMonth() + 1; //Months are zero based
    var curr_year = d.getFullYear();
    console.log(curr_date + "-" + curr_month + "-" + curr_year);
</script>

إن الوظيفة التي تستشهد بها ليست جافا سكريبت عادية ، وليس من المرجح أن تكون محمولة عبر المتصفحات ، وبالتالي ليست ممارسة جيدة. تركت مواصفات ECMAScript 3 تنسيقات الإخراج والإخراج تعمل على تنفيذ جافا سكريبت. يضيف ECMAScript 5 مجموعة فرعية من دعم ISO 8601. أعتقد أن الدالة toString () التي ذكرتها هي ابتكار في متصفح واحد (موزيلا؟)

توفر العديد من المكتبات إجراءات لإضفاء الطابع اللامع على هذا ، وبعضها مع دعم توطين واسع النطاق. يمكنك أيضا التحقق من الأساليب في dojo.date.locale .


الإطار مجاني ، محدود ولكن خفيف

var d = (new Date()+'').split(' ');
// ["Tue", "Sep", "03", "2013", "21:54:52", "GMT-0500", "(Central", "Daylight", "Time)"]

[d[3], d[1], d[2], d[4]].join(' ');
// "2013 Sep 03 21:58:03"

تأكد من Datejs عند التعامل مع التواريخ في JavaScript. إنه أمر مثير للإعجاب وموثق بشكل جيد كما ترون في حالة وظيفة toString .

تحرير : يشير تايلور فورسيث ، أن datejs عفا عليها الزمن. أستخدمه في مشروعي الحالي ولم أواجه أي مشكلة معه ، لكن يجب أن تكون على دراية بذلك وأن تأخذ بالاعتبار البدائل.


قد تجد فائدة هذا التعديل في تاريخ الكائن ، وهو أصغر من أي مكتبة ويمكن توسيعه بسهولة لدعم صيغ مختلفة:

ملحوظة:

  • ويستخدم Object.keys() الذي تم Object.keys() في المتصفحات القديمة لذلك قد تحتاج إلى تنفيذ polyfill من ارتباط معين.

الشفرة

Date.prototype.format = function(format) {
    // set default format if function argument not provided
    format = format || 'YYYY-MM-DD hh:mm';

    var zeropad = function(number, length) {
            number = number.toString();
            length = length || 2;
            while(number.length < length)
                number = '0' + number;
            return number;
        },
        // here you can define your formats
        formats = {
            YYYY: this.getFullYear(),
            MM: zeropad(this.getMonth() + 1),
            DD: zeropad(this.getDate()),
            hh: zeropad(this.getHours()),
            mm: zeropad(this.getMinutes())
        },
        pattern = '(' + Object.keys(formats).join(')|(') + ')';

    return format.replace(new RegExp(pattern, 'g'), function(match) {
        return formats[match];
    });
};

USE

var now = new Date;
console.log(now.format());
// outputs: 2015-02-09 11:47
var yesterday = new Date('2015-02-08');
console.log(yesterday.format('hh:mm YYYY/MM/DD'));
// outputs: 00:00 2015/02/08

لقد صنعت هذا المنسق البسيط للغاية ، لقد تم قصه / ن / تلوينه (تم تحديثه بإصدار أكثر إتقانا):

function DateFmt(fstr) {
  this.formatString = fstr

  var mthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  var dayNames = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var zeroPad = function(number) {
     return ("0"+number).substr(-2,2);
  }

  var dateMarkers = {
    d:['getDate',function(v) { return zeroPad(v)}],
    m:['getMonth',function(v) { return zeroPad(v+1)}],
    n:['getMonth',function(v) { return mthNames[v]; }],
    w:['getDay',function(v) { return dayNames[v]; }],
    y:['getFullYear'],
    H:['getHours',function(v) { return zeroPad(v)}],
    M:['getMinutes',function(v) { return zeroPad(v)}],
    S:['getSeconds',function(v) { return zeroPad(v)}],
    i:['toISOString']
  };

  this.format = function(date) {
    var dateTxt = this.formatString.replace(/%(.)/g, function(m, p) {
      var rv = date[(dateMarkers[p])[0]]()

      if ( dateMarkers[p][1] != null ) rv = dateMarkers[p][1](rv)

      return rv

    });

    return dateTxt
  }

}

fmt = new DateFmt("%w %d:%n:%y - %H:%M:%S  %i")
v = fmt.format(new Date())

http://snipplr.com/view/66968.82825/



يمكنك فقط توسيع "كائن Date باستخدام طريقة format جديدة كما هو موضح بواسطة meizz ، فيما يلي التعليمات البرمجية المقدمة من قبل المؤلف. وهنا jsfiddle .

Date.prototype.format = function(format) //author: meizz
{
  var o = {
    "M+" : this.getMonth()+1, //month
    "d+" : this.getDate(),    //day
    "h+" : this.getHours(),   //hour
    "m+" : this.getMinutes(), //minute
    "s+" : this.getSeconds(), //second
    "q+" : Math.floor((this.getMonth()+3)/3),  //quarter
    "S" : this.getMilliseconds() //millisecond
  }

  if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
    (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  for(var k in o)if(new RegExp("("+ k +")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length==1 ? o[k] :
        ("00"+ o[k]).substr((""+ o[k]).length));
  return format;
}

alert(new Date().format("yyyy-MM-dd"));
alert(new Date("january 12 2008 11:12:30").format("yyyy-MM-dd h:mm:ss"));

JsSimpleDateFormat is a library that can format the date object and parse the formatted string back to Date object. It uses the Java format (SimpleDateFormat class). The name of months and days can be localized.

مثال:

var sdf = new JsSimpleDateFormat("EEEE, MMMM dd, yyyy");
var formattedString = sdf.format(new Date());
var dateObject = sdf.parse("Monday, June 29, 2009");

Formatting and especially parsing dates in JavaScript can be a bit of a headache. Not all browsers handle dates in the same way. So while it's useful to know the base methods, its more practical to use a helper library.

The XDate javascript library by Adam Shaw has been around since mid-2011 and is still under active development. It has fantastic documentation, a great API, formatting, tries to remain backwards-compatible and even supports localized strings.

Link to changing the locale strings: https://gist.github.com/1221376


I was unable to find any definitive documentation on valid date formats so I wrote my own test to see what is supported in various browsers.

http://blarg.co.uk/blog/javascript-date-formats

My results concluded the following formats are valid in all browsers that I tested (examples use the date "9th August 2013"):

[Full Year]/[Month]/[Date number] - Month can be either the number with or without a leading zero or the month name in short or long format, and date number can be with or without a leading zero.

  • 2013/08/09
  • 2013/08/9
  • 2013/8/09
  • 2013/8/9
  • 2013/August/09
  • 2013/August/9
  • 2013/Aug/09
  • 2013/Aug/9

[Month]/[Full Year]/[Date Number] - Month can be either the number with or without a leading zero or the month name in short or long format, and date number can be with or without a leading zero.

  • 08/2013/09
  • 08/2013/9
  • 8/2013/09
  • 8/2013/9
  • August/2013/09
  • August/2013/9
  • Aug/2013/09
  • Aug/2013/9

Any combination of [Full Year], [Month Name] and [Date Number] separated by spaces - Month name can be in either short or long format, and date number can be with or without a leading zero.

  • 2013 August 09
  • August 2013 09
  • 09 August 2013
  • 2013 Aug 09
  • Aug 9 2013
  • 2013 9 Aug
  • إلخ...

Also valid in "modern browsers" (or in other words all browsers except IE9 and below)

[Full Year]-[Month Number]-[Date Number] - Month and Date Number must include leading zeros (this is the format that the MySQL Date type uses)

  • 2013-08-09

Using month names:
Interestingly, when using month names I discovered that only the first 3 characters of the month name are ever used so all the of the following are perfectly valid:

new Date('9 August 2013');
new Date('9 Aug 2013');
new Date('9 Augu 2013');
new Date('9 Augustagfsdgsd 2013');

If you want to show only time with two digits, this may helps you:

var now = new Date();
var cHour = now.getHours();
var cMinuts = now.getMinutes();
var cSeconds = now.getSeconds();

var outStr = (cHour <= 0 ? ('0' + cHour) : cHour) + ':' + (cMinuts <= 9 ? ('0' + cMinuts) : cMinuts) + ':' + (cSeconds <= 9 ? '0' + cSeconds : cSeconds);

Just another option, which I wrote:

DP_DateExtensions Library

Not sure if it'll help, but I've found it useful in several projects - looks like it'll do what you need.

Supports date/time formatting, date math (add/subtract date parts), date compare, date parsing, etc. It's liberally open sourced.

No reason to consider it if you're already using a framework (they're all capable), but if you just need to quickly add date manipulation to a project give it a chance.


Personally, because I use both PHP and jQuery/javascript in equal measures, I use the date function from php.js http://phpjs.org/functions/date/

Using a library that uses the same format strings as something I already know is easier for me, and the manual containing all of the format string possibilities for the date function is of course online at php.net

You simply include the date.js file in your HTML using your preferred method then call it like this:

var d1=new Date();
var datestring = date('Y-m-d', d1.valueOf()/1000);

You can use d1.getTime() instead of valueOf() if you want, they do the same thing.

The divide by 1000 of the javascript timestamp is because a javascript timestamp is in miliseconds but a PHP timestamp is in seconds.


See dtmFRM.js . If you are familiar with C#'s custom date and time format string, this library should do the exact same thing.

DEMO :

var format = new dtmFRM();
var now = new Date().getTime();

$('#s2').append(format.ToString(now,"This month is : MMMM") + "</br>");
$('#s2').append(format.ToString(now,"Year is  : y or yyyy or yy") + "</br>");
$('#s2').append(format.ToString(now,"mm/yyyy/dd") + "</br>");
$('#s2').append(format.ToString(now,"dddd, MM yyyy ") + "</br>");
$('#s2').append(format.ToString(now,"Time is : hh:mm:ss ampm") + "</br>");
$('#s2').append(format.ToString(now,"HH:mm") + "</br>");
$('#s2').append(format.ToString(now,"[ddd,MMM,d,dddd]") + "</br></br>");

now = '11/11/2011 10:15:12' ;

$('#s2').append(format.ToString(now,"MM/dd/yyyy hh:mm:ss ampm") + "</br></br>");

now = '40/23/2012'
$('#s2').append(format.ToString(now,"Year is  : y or yyyy or yy") + "</br></br>");

The library sugar.js has some great functionality for working with dates in JavaScript. And it is very well documented .

Sugar gives the Date class much love starting with the Date.create method which can understand dates in just about any format in 15 major languages, including relative formats like "1 hour ago". Dates can also be output in any format or language using an easy to understand syntax, with shortcuts to commonly used date formats. Complex date comparison is also possible with methods like is, which understand any format and apply built in precision.

A few examples:

Date.create('July 4, 1776')  -> July 4, 1776
Date.create(-446806800000)   -> November 5, 1955
Date.create(1776, 6, 4)      -> July 4, 1776
Date.create('1776年07月04日', 'ja') -> July 4, 1776
Date.utc.create('July 4, 1776', 'en')  -> July 4, 1776

Date.create().format('{Weekday} {d} {Month}, {yyyy}')    -> Monday July 4, 2003
Date.create().format('{hh}:{mm}')                        -> 15:57
Date.create().format('{12hr}:{mm}{tt}')                  -> 3:57pm
Date.create().format(Date.ISO8601_DATETIME)              -> 2011-07-05 12:24:55.528Z

Date.create().is('the 7th of June') -> false
Date.create().addMonths(2); ->"Sunday, June 15, 2014 13:39"





date