时刻js无法将日期字符串更改为新格式

时间:2014-07-04 14:29:38

标签: javascript mysql momentjs

我有以下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");

感谢任何帮助。

3 个答案:

答案 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" )

DEMO

答案 2 :(得分:0)

我使用split解决了它,如下所示:

var CreateDate = jQuery('#ut-open-date').text();
var DateArray = CreateDate.split('/');
CreateDate = DateArray[2] + '-' + DateArray[1] + '-' + DateArray[0];