使用带有语言环境的moment.js解析日期

Gen*_*aut 4 javascript date momentjs

当我使用moment.js(使用语言环境)将日期从西班牙语翻译为英语时,收到“无效日期”错误。奇怪的是,只有某些日期会失败。

我有一个日期列表,显然是相同的格式(在使用相同的库之前已对其进行了解析)。然后,当我在更改moment.js语言环境后再次对其进行解析(将日期转换为所需的语言)时,我得到了:

Enero 13º 2017, 6:00:02 Am --> Invalid date
Abril 17º 2017, 7:36:03 Pm --> Invalid date
Abril 17º 2017, 6:00:01 Am --> Invalid date
Mayo 12º 2017, 2:04:19 Pm   --> May 12th 2017, 2:04:19 Pm
Abril 17º 2017, 11:47:17 Pm --> Invalid date
Run Code Online (Sandbox Code Playgroud)

解析方法(此处初始化了格式,因为在其他时候它可以获取其他值):

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
});
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/gr1zdtag/

也许我错过了一些东西,但是我还没有找到原因。有什么可以帮助我解决这个问题的吗?

Vin*_*zoC 5

您可以在解析非英语输入时指定语言环境。您可以使用moment(String, String, String)

从版本2.0.0开始,可以将语言环境键作为第三个参数传递给moment()moment.utc()

您可以使用locale()函数更改给定矩对象的moment.locale()语言环境(同时全局更改语言环境)。

这里是一个工作示例:

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
});
Run Code Online (Sandbox Code Playgroud)
<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 13º 2017, 6:00:02 Am</li>
  <li class="videoDate">Abril 17º 2017, 7:36:03 Pm</li>
  <li class="videoDate">Abril 17º 2017, 6:00:01 Am</li>
  <li class="videoDate">Mayo 12º 2017, 2:04:19 Pm</li>
  <li class="videoDate">Abril 17º 2017, 11:47:1</li>
</ul>
Run Code Online (Sandbox Code Playgroud)


Mayo 12º 2017, 2:04:19 Pm之所以被认为是因为默认情况下会使用英文语言环境来解析字符串,而Moment的解析器非常宽容Mayo包含May在内,因此被视为有效的月份名称(使用宽恕模式)。