将中文日期转换为英文

问题描述:

我需要将2017年12月27日转换为英文日期。要转换我尝试:将中文日期转换为英文

moment("2017年12月27日", 'DDMMMMYYYY, HH:mm:ss', 'zh-cn').locale('en').toISOString(); 

,但它给了什么,但null。这可能是什么原因?我怎样才能将它转换成英文日期?

您的输入格式字符串错误。它应该与您给出的顺序相匹配(如年份,然后是月份等)。

你也应该包含特殊字符(如果有的话)。

console.log(moment("2017年12月27日", 'YYYY年MM月DD日', 'en', true).toISOString());
<script src="https://momentjs.com/downloads/moment-with-locales.min.js"></script>

+0

请注意,您的代码段不起作用(您通过'http'代替'https'加载)。您的格式标记参数不正确,您使用'年'而不是'月',这会在[严格模式]下失败(http://momentjs.com/guides/#/parsing/strict-mode/) – VincenzoC

+0

@VincenzoC对不起,我不熟悉中文,我从OP提供的字符串复制粘贴。 – alalp

您的格式参数不正确,'DDMMMMYYYY, HH:mm:ss'不匹配您的输入(2017年12月27日)。

2017年12月27日不是ISO 8601格式(因为它包括chineses字母代替-),但它是由moment(String)解析器因为它使用forgiving mode缺省认可。

特殊字符可以使用方括号[]转义,如文档Escaping characters部分所示。

var fmt = moment.localeData('zh-cn').longDateFormat('LL'); // YYYY年M月D日 
 
var m = moment("2017年12月27日", fmt, 'zh-cn'); 
 
console.log(m.locale('en').toISOString()); 
 

 
var m2 = moment("2017年12月27日", 'YYYY[年]M[月]D[日]', 'zh-cn', true); 
 
console.log(m2.locale('en').toISOString()); 
 
console.log(m2.locale('en').format('LLLL'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment-with-locales.min.js"></script>

在我的示例代码中,我用localeData()longDateFormat()获得中国特定格式的令牌。