Momentjs return 分钟操作后日期错误
Momentjs return wrong date after minutes manipulation
在我的 php 应用程序中,我这样设置意大利时区:
date_default_timezone_set('Europe/Rome');
上面的字符串位于我的 config.php
文件中,该文件是应用程序的核心。无论如何,从后端我使用 momentjs
和 CodeIgniter
框架。当用户 select 来自正确输入的日期时设置此结果:
现在我从这个输入中获取值,如下所示:
var end_date_temp = Date.parse($('#end-datetime').val());
而最初的结果是错误的:
Tue Mar 01 2016 11:03:00 GMT+0100 (ora solare Europa occidentale)
其余代码为:
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 input = '03/01/2016 11:00';
var date = moment(input, 'DD/MM/YYYY HH:mm');
document.write(date);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.0/moment.min.js"></script>
经过多次尝试,我固定在我的时区(意大利语)如下:
moment.locale('it');
var end_date_temp = moment($('#end-datetime').val()).format('DD/MM/YYYY HH:mm')
var end_date = moment(end_date_temp).add(30, 'minutes');
$('#end-datetime').val(moment(moment(end_date).toDate()).format('DD/MM/YYYY HH:mm'));
我将 .locale
声明为 it
,在接下来的时间里,我也在我的时区中格式化从输入文本返回的时间。我已经使用 .add
方法操纵了日期,为此我创建了另一个 momentjs 对象实例。最后,我再次以我的时区格式传递输入值 re-formatted 日期,因为在操作中我丢失了以前的格式。最后的结果是我想要的。希望这有帮助,无论如何,如果有人找到比我更优化的解决方案,我会很高兴看到。
// 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'));
语言环境设置对于这段代码并不重要,因为您不使用任何 locale-specific 函数或格式说明符
在我的 php 应用程序中,我这样设置意大利时区:
date_default_timezone_set('Europe/Rome');
上面的字符串位于我的 config.php
文件中,该文件是应用程序的核心。无论如何,从后端我使用 momentjs
和 CodeIgniter
框架。当用户 select 来自正确输入的日期时设置此结果:
现在我从这个输入中获取值,如下所示:
var end_date_temp = Date.parse($('#end-datetime').val());
而最初的结果是错误的:
Tue Mar 01 2016 11:03:00 GMT+0100 (ora solare Europa occidentale)
其余代码为:
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 input = '03/01/2016 11:00';
var date = moment(input, 'DD/MM/YYYY HH:mm');
document.write(date);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.0/moment.min.js"></script>
经过多次尝试,我固定在我的时区(意大利语)如下:
moment.locale('it');
var end_date_temp = moment($('#end-datetime').val()).format('DD/MM/YYYY HH:mm')
var end_date = moment(end_date_temp).add(30, 'minutes');
$('#end-datetime').val(moment(moment(end_date).toDate()).format('DD/MM/YYYY HH:mm'));
我将 .locale
声明为 it
,在接下来的时间里,我也在我的时区中格式化从输入文本返回的时间。我已经使用 .add
方法操纵了日期,为此我创建了另一个 momentjs 对象实例。最后,我再次以我的时区格式传递输入值 re-formatted 日期,因为在操作中我丢失了以前的格式。最后的结果是我想要的。希望这有帮助,无论如何,如果有人找到比我更优化的解决方案,我会很高兴看到。
// 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'));
语言环境设置对于这段代码并不重要,因为您不使用任何 locale-specific 函数或格式说明符