Как использовать .toLocaleTimeString() без отображения секунд?

В настоящее время я пытаюсь отображать время пользователя без отображения секунд. Есть ли способ, которым я могу это сделать, используя Javascript.toLocaleTimeString()?

Выполнение чего-то подобного:

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

будет отображать время пользователя с каждым устройством, например. в настоящее время он отображает 3:39:15 PM. Могу ли я отображать эту же строку, без секунд? (например, 3:39 PM)

Ответ 1

Вы всегда можете установить параметры на основе этой страницы, которую вы можете установить, чтобы избавиться от секунд, что-то вроде этого

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

Поддерживается Firefox, Chrome, IE9 + и Opera. Попробуйте его на консоли вашего веб-браузера.

Ответ 2

Значение, возвращаемое Date.prototype.toLocaleString, зависит от реализации, поэтому вы получаете то, что получаете. Вы можете попытаться проанализировать строку для удаления секунд, но в разных браузерах она может быть различной, поэтому вам нужно будет учитывать каждый используемый браузер.

Создание собственного, недвусмысленного формата не сложно с помощью методов Date. Например:

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');
}

Ответ 3

С локалями:

var date = new Date();
date.toLocaleTimeString('fr-FR', {hour: '2-digit', minute: '2-digit'})

Ответ 4

Я также искал решение этой проблемы, вот что я в итоге придумал:

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 (это символ unicode слева направо).

Я предполагаю, что если форматированное время содержит что-то вроде "XX: XX: XX", то это должно быть время с секундами, и я удаляю последнюю часть, если я не нахожу этот шаблон, ничего не меняется. Довольно безопасно, но есть риск оставить секунды в некоторых странных обстоятельствах.

Я просто надеюсь, что нет локали, которая изменит порядок отформатированных временных частей (например, сделайте это ss: mm: hh). Этот знак слева направо делает меня немного нервничающим из-за этого, поэтому я не удаляю значок справа налево (\ u202E). Я предпочитаю не найти совпадение в этом случае и оставить время, отформатированное в секундах в этом случае.

Ответ 5

Вы можете попробовать это, которое работает для моих нужд.

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

или

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

Ответ 6

Это работает для меня:

var date = new Date();
var string = date.toLocaleTimeString([], {timeStyle: 'short'});

Ответ 7

Здесь функция, которая сделает это, с комментариями, которые объясняют:

  function displayNiceTime(date){
    // getHours returns the hours in local time zone from 0 to 23
    var hours = date.getHours()
    // getMinutes returns the minutes in local time zone from 0 to 59
    var minutes =  date.getMinutes()
    var meridiem = " AM"

    // convert to 12-hour time format
    if (hours > 12) {
      hours = hours - 12
      meridiem = ' PM'
    }
    else if (hours === 0){
      hours = 12
    }

    // minutes should always be two digits long
    if (minutes < 10) {
      minutes = "0" + minutes.toString()
    }
    return hours + ':' + minutes + meridiem
  }

Поскольку, как отмечали другие, toLocaleTimeString() может быть реализовано по-разному в разных браузерах, таким образом, дает лучший контроль.

Чтобы узнать больше о объекте Date Javascript, это хороший ресурс: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

Ответ 8

Я думаю, что на исходный вопрос можно легко ответить с тем, что до сих пор игнорируется: простое разделение строк. Возвращаемое время представляет собой текстовую строку, просто разделите ее на разделителе ":" и соберите строку так, как вы хотите. Нет плагинов, нет сложных сценариев. и здесь ya go:

var myVar=setInterval(function(){myTimer()},1000);

function myTimer() {
    var d = new Date();
    currentNow = d.toLocaleTimeString();
    nowArray = currentNow.split(':');
    filteredNow = nowArray[0]+':'+nowArray[1];
    document.getElementById("demo").innerHTML = filteredNow;
}

Ответ 9

Несмотря на то, что это старый вопрос, у меня был тот же самый я недавно, и придумал более простое решение с использованием регулярных выражений и функцию замены строки в качестве другой альтернативы (нет необходимости в внешних js-библиотеках или полагаться на ECMAScript API интернализации):

var d = new Date();
var localeTime = d.toLocaleTimeString();
var localeTimeSansSeconds = localeTime.replace(/:(\d{2}) (?=[AP]M)/, " ");

Этот подход использует регулярное выражение, чтобы захватить конец строки ss AM/PM строки и заменяет часть: ss пробелом, возвращая остальную часть строки нетронутой. (Буквально говорит: "Найдите двоеточие с двумя цифрами и пробелом, за которым следует либо AM, либо PM, и замените двоеточие, две цифры и пробел пробелом).

Это выражение/подход работает только для en-US и en-US-like Locales. Если вам также нужен аналогичный результат, скажем, британский английский (en-GB), который не использует AM/PM, требуется другое регулярное выражение.

Основываясь на исходном выпуске пробной версии, я предполагаю, что они в основном касались американской аудитории и временной схемы en-US.

Ответ 10

Просто преобразуйте дату в строку, а затем объедините нужные подстроки из нее.

let time = date.toLocaleTimeString();
console.log(time.substr(0, 4) + time.substr(7, 3))
//=> 5:45 PM