我有以下HTML:
<strong id="ut-open-date">27/06/2014</strong>
我想阅读text / innerhtml并将其格式转换为&#34; YYYY-MM-DD&#34;所以我可以将它插入MySQL表。我正在使用moment.js
库,我的代码如下:
var CreateDate = moment(jQuery('#ut-open-date').html()).format("DD/MM/YYYY");
CreateDate = moment(CreateDate).format("YYYY-MM-DD");
但代码会将27/06/2014
更改为2016-06-03
,而我无法理解原因。
我也尝试了同样的结果。
var CreateDate = moment(jQuery('#ut-open-date').html()).format("YYYY-MM-DD");
感谢任何帮助。
答案 0 :(得分:2)
如果我们逐步细分您的代码,您可以看到它出错的地方:
var CreateDate = moment(jQuery('#ut-open-date').html())
这部分使用默认构造函数来尝试解析日期,这最多是不可靠的并且已被弃用。所以,我们想要猜测这里的日期格式是什么。
.format("DD/MM/YYYY");
这是在步骤1中读取的内容,并尝试将其转换为格式为DD / MM / YYYY的字符串
CreateDate = moment(CreateDate)
现在你在没有指定格式的情况下再次解析,所以一刻就做了最好的猜测
.format("YYYY-MM-DD");
现在你告诉它把它猜对象的任何东西变成一个格式为YYYY-MM-DD的字符串
请改为:
var CreateDate = moment(jQuery('#ut-open-date').html(), 'DD/MM/YYYY').format('YYYY-MM-DD');
不推荐使用moment(dateString)
表单,您应该使用表单时刻(dateString,expectedFormat)。
请参阅此处的时刻文档:http://momentjs.com/docs/#/parsing/string-format/
感谢athms的链接
答案 1 :(得分:0)
问题是您需要通过指定第二个参数来告诉moment.js
要解析的日期字符串的格式。查看全部supported format。如果未列出您的格式(See the Open Issue for NON-ISO strings),则需要指定日期格式参数。
moment( jQuery('#ut-open-date').html(), "DD/MM/YYYY" )
答案 2 :(得分:0)
我使用split
解决了它,如下所示:
var CreateDate = jQuery('#ut-open-date').text();
var DateArray = CreateDate.split('/');
CreateDate = DateArray[2] + '-' + DateArray[1] + '-' + DateArray[0];