Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
377 views
in Technique[技术] by (71.8m points)

javascript - Parse date with moment.js with locales

I am getting an "Invalid date" error when I translate my dates from Spanish to English with moment.js (with locales). The weird thing here, is that only fails with some dates.

I have a list of dates, apparently of the same format (they were parsed before using the same library). Then when I parsed it again after change the moment.js locale (To translate my dates to the desired language) I get this:

Enero 13o 2017, 6:00:02 Am --> Invalid date
Abril 17o 2017, 7:36:03 Pm --> Invalid date
Abril 17o 2017, 6:00:01 Am --> Invalid date
Mayo 12o 2017, 2:04:19 Pm   --> May 12th 2017, 2:04:19 Pm
Abril 17o 2017, 11:47:17 Pm --> Invalid date

Parse Method (format is initialized here because in other moments it can get other values):

format = 'MMMM Do YYYY, h:mm:ss a';
$(".videoDate").each(function(){
    var _text = $(this).text();//Extract initial date
    var _date = moment(_text, format).format('MMMM Do YYYY, h:mm:ss a');//format
    $(this).text(_date);//new date setting
});

http://jsfiddle.net/gr1zdtag/

Maybe I am missing something but I don't find the reason yet. Can any help me with this problem?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can specify locale when parsing non-english input. You can use moment(String, String, String):

As of version 2.0.0, a locale key can be passed as the third parameter to moment() and moment.utc().

You can use locale() function to change locale of a given moment object (while moment.locale() changes locale globally).

Here a working sample:

var format = 'MMMM Do YYYY, h:mm:ss a';
$(".videoDate").each(function(){
    var _text = $(this).text();//Extract initial date
    //Parse in spanish and convert it in english
    var _date = moment(_text, format, 'es')
                  .locale('en')
                  .format('MMMM Do YYYY, h:mm:ss a');//format
    $(this).text(_date);//new date setting
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/moment-with-locales.min.js"></script>

<ul>
  <li class="videoDate">Enero 13o 2017, 6:00:02 Am</li>
  <li class="videoDate">Abril 17o 2017, 7:36:03 Pm</li>
  <li class="videoDate">Abril 17o 2017, 6:00:01 Am</li>
  <li class="videoDate">Mayo 12o 2017, 2:04:19 Pm</li>
  <li class="videoDate">Abril 17o 2017, 11:47:1</li>
</ul>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...