Javascript Momentjs在分钟操作后返回错误的日期
在我的php应用程序中,我按如下方式设置意大利时区: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
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'));