it-swarm.dev

كيف يمكنني استخدام .toLocaleTimeString () دون عرض ثوانٍ؟

أحاول حاليًا عرض وقت المستخدم دون عرض الثواني. هل هناك طريقة يمكنني القيام بها باستخدام Javascript's .toLocaleTimeString ()؟

القيام بشيء مثل هذا:

var date = new Date();
var string = date.toLocaleTimeString();

سيعرض وقت المستخدم مع كل وحدة ، على سبيل المثال حاليا فإنه يعرض 3:39:15 PM. هل أنا قادر على عرض نفس السلسلة ، فقط دون الثواني؟ (على سبيل المثال 3:39 مساءً)

121
javadog36

يمكنك دائمًا تعيين الخيارات ، بناءً على هذا الصفحة يمكنك تعيين ، للتخلص من الثواني ، شيء من هذا القبيل

var dateWithouthSecond = new Date();
dateWithouthSecond.toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});

بدعم من Firefox و Chrome و IE9 + و Opera. جربه على وحدة تحكم مستعرض الويب الخاص بك.

242
CJLopez

القيمة التي يتم إرجاعها بواسطة Date.prototype.toLocaleString تعتمد على التنفيذ ، حتى تحصل على ما تحصل عليه. يمكنك محاولة تحليل السلسلة لإزالة ثوانٍ ، ولكن قد تكون مختلفة في المتصفحات المختلفة لذلك تحتاج إلى السماح لكل متصفح قيد الاستخدام.

إنشاء تنسيق خاص لا لبس فيه ليس صعبًا باستخدام طرق التاريخ. فمثلا:

function formatTimeHHMMA(d) {
  function z(n){return (n<10?'0':'')+n}
  var h = d.getHours();
  return (h%12 || 12) + ':' + z(d.getMinutes()) + ' ' + (h<12? 'AM' :'PM');
}
9
RobG

لقد كنت أبحث أيضًا عن حل لهذه المشكلة ، وإليك ما توصلت إليه في النهاية:

function getTimeStr() {
    var dt = new Date();
    var d = dt.toLocaleDateString();
    var t = dt.toLocaleTimeString();
    t = t.replace(/\u200E/g, '');
    t = t.replace(/^([^\d]*\d{1,2}:\d{1,2}):\d{1,2}([^\d]*)$/, '$1$2');
    var result = d + ' ' + t;
    return result;
}

يمكنك تجربتها هنا: http://jsfiddle.net/B5Zrx/

\ u200E هي بعض حروف التنسيق التي رأيتها على بعض IE إصدار (وهي علامة من اليسار إلى اليمين).

أفترض أنه إذا كان الوقت المنسق يحتوي على شيء مثل "XX: XX: XX" فيجب أن يكون الوقت مع ثوانٍ وأزل الجزء الأخير ، إذا لم أجد هذا النمط ، فلن يتغير شيء. آمنة إلى حد ما ، ولكن هناك خطر ترك ثواني في بعض الظروف الغريبة.

آمل فقط أنه لا توجد لغة من شأنها أن تغير ترتيب أجزاء الوقت المنسقة (على سبيل المثال ، اجعلها ss: mm: hh). تجعلني هذه العلامة من اليسار إلى اليمين متوترة قليلاً حيال ذلك ، ولهذا السبب لا أزيل العلامة من اليمين إلى اليسار (\ u202E) - أفضل عدم العثور على تطابق في هذه الحالة وترك الوقت مهيأ بالثواني في مثل هذه الحالة.

2
ArturG

يمكنك تجربة هذا ، والذي يعمل لتلبية احتياجاتي.

var d = new Date();
d.toLocaleTimeString().replace(/:\d{2}\s/,' ');

أو

d.toLocaleString().replace(/:\d{2}\s/,' ');
1
karma