Javascript Momentjs在分钟操作后返回错误的日期

Javascript Momentjs在分钟操作后返回错误的日期,javascript,php,codeigniter,date,momentjs,Javascript,Php,Codeigniter,Date,Momentjs,在我的php应用程序中,我按如下方式设置意大利时区: date_default_timezone_set('Europe/Rome'); 上面的字符串位于我的config.php文件中,它是应用程序的核心。无论如何,从后端我使用momentjs和CodeIgniter框架。当用户从正确的输入设置中选择日期时,此结果: 现在我从这个输入中得到如下值: var end_date_temp = Date.parse($('#end-datetime').val()); 而最初的结果是错误的: 2

在我的php应用程序中,我按如下方式设置意大利时区:

date_default_timezone_set('Europe/Rome');
上面的字符串位于我的
config.php
文件中,它是应用程序的核心。无论如何,从后端我使用
momentjs
CodeIgniter
框架。当用户从正确的输入设置中选择日期时,此结果:

现在我从这个输入中得到如下值:

var end_date_temp = Date.parse($('#end-datetime').val());
而最初的结果是错误的:

2016年3月1日星期二11:03:00 GMT+0100(欧罗巴西太阳城)

代码的其余部分是:

var end_date = moment(end_date_temp).add(serviceDuration, 'minutes').format('DD/MM/YYYY HH:mm');
$('#end-datetime').val(end_date);
注意:我还试图设置
moment.locale('it')
,但同样的结果出现了,在我的javascript库中,我使用了意大利时区momentjs。怎么了

更新代码:

var end_date_temp = moment($('#end-datetime').val())._i;
var end_date = moment(moment(end_date_temp).add(serviceDuration, 'minutes')).format('DD/MM/YYYY HH:mm');
$('#end-datetime').val(end_date);

momentjs使用美国日期格式(MM/DD/YYYY),强制使用格式以获得正确的日期:

var输入='03/01/2016 11:00';
变量日期=时刻(输入'DD/MM/YYYY HH:MM');
文件。书写(日期)

经过多次尝试,我将时区(意大利语)设置为:

我将
.locale
声明为
it
,在下一次格式化时区中输入文本返回的时间时也是如此。我用
.add
方法操纵了日期,为此我创建了momentjs对象的另一个实例。最后,我从输入中传递值,再次以我的时区格式重新格式化日期,因为在操作中,我丢失了以前的格式。最终的结果就是我想要的。希望这有帮助,不管怎样,如果有人找到一个比我的更优化的解决方案,我会很高兴看到

// parse the input string to a moment object, **specifying the input format**
var end_date = moment($('#end-datetime').val(), 'DD/MM/YYYY HH:mm');

// manipulate it as desired
end_date.add(serviceDuration, 'minutes');

// format it to the specified output format, and assign the result back to your field
$('#end-datetime').val(end_date.format('DD/MM/YYYY HH:mm'));
如果愿意,您可以在一行代码中完成此操作

$('#end-datetime').val(moment($('#end-datetime').val(), 'DD/MM/YYYY HH:mm').add(serviceDuration, 'minutes').format('DD/MM/YYYY HH:mm'));

对于这段特定的代码,区域设置并不重要,因为您没有使用任何特定于区域设置的函数或格式说明符

I已经使用了.format('DD/MM/YYYY hh:MM');但正如我上面解释的那样,最终日期是不正确的。
format()
用于以字符串形式返回日期。要正确解析输入,您必须将格式作为
moment()
的第二个参数。您仍然将输入格式与输出格式混淆,并且不必要地多次解析/转换。我将在单独的回答中发布一个更好的版本。不要使用
\u I
字段,也不要使用带有
\u
前缀的任何其他字段。他们不是为了外部消费。伟大的解决方案马特,现在我感觉像是dev生活的最后一个形象:祝你有一个美好的一天,新年快乐!谢谢你也是@Dillinger,所以我发布了完全相同的东西不为你咀嚼,这不是一个有效的答案?@ShanShan我没有说这不是一个有效的答案,但对于我的情况,它不起作用,但是其他用户可能会发现我和Matt的答案更好。对此我很抱歉。
$('#end-datetime').val(moment($('#end-datetime').val(), 'DD/MM/YYYY HH:mm').add(serviceDuration, 'minutes').format('DD/MM/YYYY HH:mm'));