JavaScript: какой самый короткий способ конвертировать Unix в длинный формат даты - PullRequest
0 голосов
/ 14 мая 2018

У меня есть строка времени ISO:

"2018-05-14T14:04:53.16"

Мне нужно преобразовать его в следующее:

"May 05, 2018"

Насколько я знаю, сначала нужно преобразовать его во временную отметку, используя синтаксический анализ, а затем новую дату:

let timestamp = new Date(Date.parse("2018-05-14T14:04:53.16"))

Затем раздельно получайте каждую часть, сопоставляйте их с массивами карт и затем объединяйте их:

let monthNames = ['January','Fabruary'...];
let month = timestamp.getMonth(); //gatDay/getYear
let monthName = monthNames[month - 1] 

затем окончательно объединяя все части в строку:

let finalString = monthName+' '+day+', '+year;

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

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Альтернативный (?)

console.log(
new Date("2018-05-14T14:04:53.16").toUTCString().substr(0,12)
)

Тест производительности! (Использование benchmark.js )

var suite = new Benchmark.Suite;

// add tests
suite.add('toUTCString().substr', function() {
  new Date("2018-05-14T14:04:53.16").toUTCString().substr(0,12)
})
.add('Regex', function() {
  timestamp = new Date(Date.parse("2018-05-14T14:04:53.16"))
  timestamp.toString().replace(/\w+ (\w+ \d+)( \d+).*/, "$1,$2")
})
.add('toUTCString().split', function() {
  var d = new Date("2018-05-14T14:04:53.16").toUTCString().split(" ");
    d[2] +  ", " + d[1] + " " +d[3]
})
// add listeners
.on('cycle', function(event) {
  console.log(String(event.target));
})
.on('complete', function() {
  console.log('Fastest is ' + this.filter('fastest').map('name'));
})
// run async
.run({ 'async': true });
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/platform/1.3.5/platform.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/benchmark/2.1.4/benchmark.min.js"></script>

Обновление, неверный вывод. Один способ, используя split для перекомпоновки:

var d = new Date("2018-05-14T14:04:53.16").toUTCString().split(" ")

console.log(
d[2] +  " " + d[1] + ", " +d[3]
)
0 голосов
/ 14 мая 2018

Вы также можете использовать moment.js:

var newDate = new moment("2018-05-14T14:04:53.16");
var html = 'Result: <br/>';
html += 'Formatted: ' + newDate.format('MMM DD, YYYY');

$('#output').html(html);

JSFiddle: https://jsfiddle.net/okd4mdcw/

0 голосов
/ 14 мая 2018

Вы можете преобразовать timestamp в нужный формат с помощью toString и некоторых манипуляций со строками:

timestamp.toString().replace(/\w+ (\w+ \d+)( \d+).*/, "$1,$2")
...