我正在向我的web应用程序中创建一个datepicker(材料化)系统,并且我面临着一个日期比较的怪异问题(请参阅下文)。我想警告用户,如果他希望约会女巫少于48小时,他将付出更多。为此,我编写了一个脚本来检查输入start_date的更改。
('#event_start_at_date').on('change', function(){
var limit = moment().add(2, 'days').format("DD/MM/YYYY")
if($('#event_d_script').val() != "true"){
if ( $(this).val() <= moment() ){
// the date is impossible
$(this).val(date_min)
} else if ( $(this).val() <= limit ) {
// the date is less than 48h from today
$('#date_warning').slideDown();
if($('#event_urgent').val() == "false"){
var amount = parseFloat($('#event_price').val()) + 10
$('#offer_footer_price_val').text(amount);
$('#event_price').val(amount)
$('#event_urgent').val("true");
$('#event_urgent_checkbox').attr('checked', true);
}
} else{
// the date is more than 48h from today
$('#date_warning').slideUp();
if($('#event_urgent').val() == "true"){
// The previous date was urgent
var amount = parseFloat($('#event_price').val()) - 10
$('#offer_footer_price_val').text(amount);
$('#event_price').val(amount);
$('#event_urgent').val("false");
$('#event_urgent_checkbox').attr('checked', false);
}
}
if($('#event_end_at_date').val() <= $(this).val() ){
// The end can't be before the start
$('#event_end_at_date').val($(this).val())
}
}
});
我的错误=仅在当天而不是整个日期进行比较。
例如,如果今天是11月12日,则该增加将应用到11月14日。其他月份(例如:12月12日)也适用于14日之前的所有天。
我认为这是日期格式的错误,但我无法解决
答案 0 :(得分:2)
两个问题:
您与值类型不一致,例如将 string 与Moment实例进行比较:
if ( $(this).val() <= moment() ) {
您正在按字典顺序(即以文本形式)比较应该进行数字比较的事物,例如:
} else if ( $(this).val() <= limit ) {
相反,使用可以有意义地进行比较的数据类型。在这种情况下,我将使用Moment实例,因为将它们进行比较会将其强制为数字(距大纪元以来的毫秒数);
if ( moment($(this).val()) < moment() ) {
和
var limit = moment().add(2, 'days'); // No `format`
和
} else if ( moment($(this).val()) <= limit ) {
如果您要忽略这些日期时间的时间方面,而只是比较日期,则可以使用startOf("day")
将各种Moment实例设置为午夜,例如:
if ( moment($(this).val().startOf("day")) < moment().startOf("day") ) {
和
var limit = moment().add(2, 'days').startOf("day");
和
} else if ( moment($(this).val()).startOf("day") <= limit ) {
答案 1 :(得分:1)
没有仔细查看代码,似乎您的错误很可能是因为格式为DD // MM // YYYY。
您的日期计算(无论是大还是小)都是数学计算的,就好像它们只是数字一样。即1995年2月5日的计算就像是02051995。
所以您的意外行为是因为,如果您想像得到,则假设DAY是最大的单位,这意味着从数值上讲,一天的变化要比YEAR的变化大,因为您的年份是最小的单位,你的日子最大。
即。 03/10/2018将大于02/12/2018,因为03102018大于02122018。
将计算时的格式更改为YYYY-MM-DD以解决您的问题。