2016-09-30 3 views
1

Вот что мне нужно сделать:Options)

У меня есть ISO 8601 DateString dateString = "2016-09-30T04:00:00.000+0000" , который мне нужно разобрать и произвести читаемую дату «September 30, 2016»

Вот мой форматировщик sap.ui.core.format.DateFormat, который делает это для меня.

return dateFormatter.format(new Date(dateString)); 

Проблема, По MDN,

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

  • Прямой вызов: Date.parse(dateString)
  • неявный вызов: new Date(dateString)

Так Date.parse() называется так или иначе с моим форматировщиком.

Есть ли какие-либо рекомендации по проведению такого ручного разбора, как рекомендовано MDN? Есть ли способ SAPUI5 для достижения этого?

+1

ES5, я думаю, на ES3 очень мало людей, и если бы на ES3, то я сомневаюсь, что SAPUI5 будет работать :), поэтому я бы сказал, что ваш штраф, чтобы использовать синтаксический анализ. Если нет, вы также можете использовать moment.js. – Keith

+1

'Date.parse' * поддерживается * от ES5, но способы его реализации в двигателях все еще не согласованы, поэтому вы должны сами провести синтаксический анализ даты. – adeneo

+0

@adeneo, эта дата выглядит как отлично сформированная дата ISO, если вы знаете обо всех браузерах, которые не могут ее декодировать, мне было бы интересно. – Keith

ответ

0

Синтаксический ISO датирует должны быть последовательными в большинстве двигателей, но нет никакой гарантии, правильный способ определения объекта Date всегда будет передавать целые аргументы следующим

new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]); 

, но видя, как вы хотите строка, содержащая месяцев и т.д. назад, и не является объектом, наиболее последовательным способом сделать это было бы просто разобрать даты себя

var dateString = "2016-09-30T04:00:00.000+0000"; 
 

 
var months = [ 
 
    '', 'January', 'February', 'March', 'April', 
 
    'May', 'June', 'July', 'August', 'September', 
 
    'October', 'November', 'December' 
 
]; 
 

 
var parts = dateString.split(/[-T:.]/); 
 
var parsed = months[+parts[1]] + ' ' + parts[2] + ', ' + parts[0]; 
 

 
document.body.innerHTML = parsed; // September 30, 2016

+0

После долгих обсуждений, проб и ошибок - способ решения SAPUI5 заключается в использовании [sap.ui.model.type.DateTime] (https://openui5.hana.ondemand.com/docs/api/symbols/sap .ui.model.type.DateTime.html) или [sap.ui.model.type.Date] (https://openui5.hana.ondemand.com/docs/api/symbols/sap.ui.model.type. Date.html), если у вас нет слишком большой настройки для отображения дат. Использование этого, однако, будет основывать стиль дат на основе информации о локали или дате времени локальной машины. – daredadevil