javascript - 日期比较格式
问题描述
我正在我的 web 应用程序中创建一个日期选择器(Materialize)系统,并且我面临一个日期比较的奇怪问题(见下文)。我想警告用户,如果他想要约会女巫少于 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 日之前的所有日子。
我认为这是日期格式的错误,但我无法修复它
解决方案
两个问题:
您与值类型不一致,例如将字符串与 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 ) {