2016-01-13 5 views
0

У меня довольно ужасное время, чтобы преобразовать 8601 в читаемый формат. Дата отображается как «P0DT0H0M10S» и хранится в переменной var timeLeft. Каждая статья, которую я нахожу в Интернете, рассказывает мне, как превращать даты в формат 8601, но не наоборот.8601 ISO String для чтения формата даты в Javascript

Я пробовал использовать moment.js, но, похоже, вращается вокруг текущей даты, а не один, установленный моим timeLeft var. Как получить этот var в удобном для пользователя формате? Спасибо

+0

Эта строка не выглядит как формат ISO 8601. Этот формат включает даты, которые выглядят как '2010-01-01T05: 06: 07'. – Pointy

+2

Это [формат продолжительности] (https://en.wikipedia.org/wiki/ISO_8601#Durations) ... – epascarello

+0

@epascarello ah OK. В этом случае я не уверен, что значит преобразовать продолжительность времени в экземпляр Date. Я думаю, вы могли бы получить дату относительно некоторой другой даты, смещенной на продолжительность, которая, как я думаю, может быть то, о чем говорит OP. – Pointy

ответ

0

Прежде всего, это не ISO-8601 date (даже не близко).

Во-вторых, momentjs does support parsing строка в момент, с синтаксисом moment("20111031", "YYYYMMDD") (от их front page examples).

Я не уверен, какой шаблон вам нужен, но может быть что-то вроде [P]D[DT]H[H]M[M]S[S].

+2

Возможно, прокрутите вниз: https://en.wikipedia.org/wiki/ISO_8601#Durations – epascarello

+0

@epascarello Хороший улов. Я собираюсь назвать семантику и сказать, что они все еще не являются датами. Момент должен все же быть в состоянии проанализировать их и может сделать что-то значимое, в сочетании с текущей или другой датой. – ssube

1

момент имеет duration type:

var duration = moment.duration('P1Y2M3DT4H5M6S'); 
 
// user-friendly format 
 
var out = duration.humanize(); 
 

 
snippet.log(out);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.1/moment.min.js"></script> 
 
<script src="https://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

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