Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 日期比较格式_Javascript_Date_Momentjs - Fatal编程技术网

Javascript 日期比较格式

Javascript 日期比较格式,javascript,date,momentjs,Javascript,Date,Momentjs,我正在我的webapp中创建一个日期选择器(Materialize)系统,我面临着一个奇怪的日期比较问题(见下文)。我想提醒用户,如果他想要一个少于48小时的约会,他将支付更多。为此,我编写了一个脚本来检查输入开始日期的更改 ('#event_start_at_date').on('change', function(){ var limit = moment().add(2, 'days').format("DD/MM/YYYY") if($('#event_d_script').v

我正在我的webapp中创建一个日期选择器(Materialize)系统,我面临着一个奇怪的日期比较问题(见下文)。我想提醒用户,如果他想要一个少于48小时的约会,他将支付更多。为此,我编写了一个脚本来检查输入开始日期的更改

('#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())
    }
  }
});
('event'start'u at'u date')。在('change',function(){
var limit=moment().add(2,'天').format(“DD/MM/yyyyy”)
if($('#event_d_script').val()!=“true”){

如果($(this).val()没有仔细查看代码,似乎您的错误很可能是因为您的格式是DD//MM//YYYY

你的日期计算,不管是大还是小,都是用数学方法计算的,就好像它们只是数字一样。例如,1995年5月2日的计算与1995年5月2日的计算一样简单

因此,你的意外行为是因为如果你想象,你假设一天是最大的单位,这意味着一天中的变化在数量上比一年中的变化更大,因为你的年是最小的单位,你的天是最大的

2018年10月3日将大于2018年12月2日,因为03102018大于02122018


将计算时的格式更改为,YYYY-MM-DD以解决问题。

如果不仔细查看代码,似乎您的错误很可能是因为您的格式为DD//MM//YYYY

你的日期计算,不管是大还是小,都是用数学方法计算的,就好像它们只是数字一样。例如,1995年5月2日的计算与1995年5月2日的计算一样简单

因此,你的意外行为是因为如果你想象,你假设一天是最大的单位,这意味着一天中的变化在数量上比一年中的变化更大,因为你的年是最小的单位,你的天是最大的

2018年10月3日将大于2018年12月2日,因为03102018大于02122018

将计算时的格式更改为,YYYY-MM-DD以解决您的问题。

两个问题:

  • 您与值类型不一致,例如,将字符串与矩实例进行比较:

    if ( $(this).val() <= moment() ) {
    

    }else if(moment($(this).val()).startOf(“day”)两个问题:

  • 您与值类型不一致,例如,将字符串与矩实例进行比较:

    if ( $(this).val() <= moment() ) {
    


    }else if(moment($(this).val()).startOf(“day”)我想你的错误是关于日期的格式
    $(this).val()我想你的错误是关于日期的格式
    $(this).val()您好@T.J,感谢您花时间回复我。我实施您的解决方案以测试itI无法使用您的解决方案,我不知道为什么。因此我实施了@cmprogram one。但感谢您的建议@T.J,感谢您花时间回复我。我实施您的解决方案以测试itI无法使用您的解决方案,我不知道为什么。因此我实施了感谢您的建议感谢您的解决方案@cmprogram。这是最简单有效的“您的日期计算,无论大小,都是数学计算的,就像它们只是数字一样。例如,1995年2月5日的计算与1995年2月5日的计算类似。”不,这是不正确的。它们作为字符串进行比较。但是,(@stigGaret)解决方案也有效,因为这些字符串以类似日期的方式进行比较(年最重要,然后是月,然后是天).@T.J.Crowder您能提供相关文档吗?如果我们能让我的答案更准确,我将不胜感激,我只想检查一下这是在哪里找到的。我目前也在搜索,但如果您知道确切的位置,我将不胜感激。@cmprogram-嗯,
    $(this).val()
    返回一个字符串,而
    .format
    返回一个字符串,因此
    字符串
    的通常含义适用,这是字符串的字典(松散地,字母)比较。“不仔细看代码…”这不是一个开始回答问题的好方法。感谢您的解决方案@cmprogram。这是最简单和有效的“您的日期计算,无论大小,都是用数学方法计算的,就像它们只是数字一样。例如,1995年5月2日的计算与1995年5月2日的计算一样简单。”不,这是不正确的。它们作为字符串进行比较。但是,(@stigGaret)解决方案也有效,因为这些字符串以类似日期的方式进行比较(年最重要,然后是月,然后是天).@T.J.Crowder您能提供相关文档吗?如果我们能让我的答案更准确,我将不胜感激,我只想检查一下这是在哪里找到的。我目前也在搜索,但如果您知道确切的位置,我将不胜感激。@cmprogram-嗯,
    $(this).val()
    返回一个字符串,
    .format
    返回一个字符串,因此
    字符串
    的通常含义适用,这是字符串的字典(松散地,字母)比较。“不仔细看代码…”不是开始回答的好方法。
    if ( moment($(this).val()) < moment() ) {
    
    var limit = moment().add(2, 'days'); // No `format`
    
    } else if ( moment($(this).val()) <= limit ) { 
    
    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 ) {