Локаль конкретная дата без года

Я использую https://github.com/abritinthebay/datejs/ для форматирования даты из-за поддержки локали. Однако нельзя ли получить полное время без года?

пример

Дата ввода:2014/09/20 20:00:00

Дата выхода: 09/20 20:00

И это должно уважать настройки локали!

2 ответа

Похоже, что с ES2015 вы можете просто пропустить первый параметр и установить только параметр 'options', таким образом будет применяться локаль:

new Date().toLocaleString(undefined, {
    month: "short", day: "numeric", 
    hour: "numeric", minute: "numeric", second: "numeric"
}) // "Jul 11, 5:50:09 PM"

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

const dateTime = new Date();
const datePart = `${dateTime.toLocaleDateString(undefined, {month: "short", day: "numeric"})}`;
const timePart = `${dateTime.toLocaleTimeString()}`;
const result = `${datePart} ${timePart}`;
// "Jul 11 5:57:10 PM"
console.log(new Date().toLocaleString('en-En',{weekday: "long", month: "long", day: "numeric"}))

Вы можете изменить эти параметры, как вы хотите.

Чтобы отформатировать дату как месяц / день, час: минуты с Date.js, вы должны вызвать toString в формате "MM/DD HH:mm", чтобы получить две цифры для всех значений, например:

console.log(new Date().toString('MM/dd HH:mm'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js"></script>

Попытка определить формат, который пользователь ожидает увидеть, очень проблематична, независимо от того, называется ли он "культурой", "локалью" или просто "предпочтением". У Javascript нет доступа к системным настройкам, и браузер их не раскрывает. Вы можете попытаться угадать на основе выходных данных Date.prototype.toLocaleString, но это полностью зависит от реализации и не обязательно соответствует предпочтениям пользователя.

Одним из распространенных подходов является использование однозначного формата, чтобы пользовательские настройки не имели значения, например

console.log(new Date().toString('dd-MMM HH:mm'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/datejs/1.0/date.min.js"></script>

Другой подход заключается в том, чтобы иметь однозначный формат по умолчанию, а затем позволить пользователю выбирать из нескольких поддерживаемых форматов и сохранять предпочтения.

Существует также встроенный Date.prototype.toLocaleString, который довольно ненадежен, но некоторые браузеры поддерживают дополнительные параметры форматирования ECMA-402 Intl. Это довольно обычный форматер, поэтому его нельзя рекомендовать, когда есть библиотеки, которые делают работу намного лучше, например,

var options = {
  month: 'short',
  day  : '2-digit',
  hour : '2-digit',
  minute:'2-digit'
};

// Browser dependent, something like en-us: Jan 21, 8:39 AM
console.log('en-us: ' + new Date().toLocaleString('en-us',options))

// Browser dependent, something like en-gb: 21 Jan, 08:39
console.log('en-gb: ' + new Date().toLocaleString('en-gb',options))

Еще один подход заключается в написании вашего собственного анализатора и форматера, который делает именно то, что вам нужно. Если вам нужно поддерживать только один или два формата, это довольно просто, например,

// input format yyyy/mm/dd hh:mm:ss
function parseDateString(ds) {
  var d = ds.split(/\D+/);
  return new Date(d[0], --d[1], d[2], d[3], d[4], d[5]);
}

// Return date string as mm/dd hh:mm
function formatDate(d) {
  function z(n) {
    return (n < 10 ? '0' : '') + n
  }
  return z(d.getMonth() + 1) + '/' + z(d.getDate()) +
    ' ' + z(d.getHours()) + ':' + z(d.getMinutes());
}

console.log(formatDate(parseDateString('2014/09/20 20:00:00'))); // 09/20 20:00

Таким образом, вы можете заменить целую библиотеку менее чем дюжиной строк кода.:-)

Другие вопросы по тегам