Локаль конкретная дата без года
Я использую 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
Таким образом, вы можете заменить целую библиотеку менее чем дюжиной строк кода.:-)