2014-09-30 2 views
0

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

Пример

Входной сигнал: Дата 2014/09/20 20:00:00

Выход: 09/20 20:00

И он должен соблюдать региональные настройки!

+0

Javascript не предоставляет доступа к языковым настройкам. Лучшие библиотеки могут делать, это угадать часовой пояс от смещения часовой пояс в середине и конце года. Существует встроенный [* Date.prototype.toLocaleString *] (http://ecma-international.org/ecma-262/5.1/#sec-15.9.5.5), но выход полностью зависит от реализации и сильно отличается от хоста к хосту. Вероятно, лучшее, что вы можете сделать, это попросить пользователей определить формат, который им нравится, и запомнить выбор для последующего использования. – RobG

ответ

-1

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

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 formatting options. Это довольно обычное явление, как форматирование, поэтому на самом деле нельзя рекомендовать, когда есть библиотеки, которые делают работу намного лучше, например.

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

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

+0

Я не уверен, что это относится к языку браузеров, поскольку этот ответ является жестким кодом для даты в США. Автор хочет что-то, что будет работать в любых странах, как это делает я. – Simon

+1

@ Simon - вы не можете определить локаль пользователя, кроме как через геолокацию (что ненадежно), и это не обязательно означает формат, который пользователь ожидает даты. Вы правы, но это был не очень хороший ответ. Надеемся, что обновления станут лучше. Возможно, я должен был просто сказать «* Не пытайтесь определить местоположение пользователя и использовать его для форматирования даты, используйте нестандартный формат, например« 20 -Jan-2016 »вместо *». – RobG

+0

Думайте, что ваше последнее предложение было бы приемлемым ответом на меня. – Simon

0
console.log(new Date().toLocaleString('en-En',{weekday: "long", month: "long", day: "numeric"})) 

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

Смежные вопросы