当我使用 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
解析方法(格式在此初始化,因为在其他时刻它可以获得其他值):
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
});
也许我错过了一些东西,但我还没找到原因。可以帮我解决这个问题吗?
答案 0 :(得分:3)
您可以在分析非英语输入时指定语言环境。您可以使用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
});

<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>
&#13;
默认情况下,
Mayo 12º 2017, 2:04:19 Pm
被识别为默认情况下使用英语语言环境解析字符串并且 Moment的解析器非常宽容。 Mayo
包含 May
,因此它被视为有效的月份名称(使用forgiving mode)。