Bootstrap 3 datepicker:更改日期显示格式;防止在今天日期之前选择日期

Posted

技术标签:

【中文标题】Bootstrap 3 datepicker:更改日期显示格式;防止在今天日期之前选择日期【英文标题】:Bootstrap 3 datepicker: Change date display format; Prevent date selections prior to Todays date 【发布时间】:2021-02-10 09:10:28 【问题描述】:

我第一次在酒店网站上使用 Bootstrap 日期选择器。我已经安装了它,它确实显示了它应该显示的日历。

但是,日期一旦选择,就会以这种格式显示:dd.mm.yyyy(即:28.10.2020)。 我希望它显示为 dd MMM, yyyy(即:2020 年 10 月 28 日)。我尝试使用类 datepicker 和这段代码(如下所示) - 但它不起作用:$('.datepicker').datepicker(format: 'dd MMM, yyyy', todayHighlight: true);

另外,我希望日历不允许您选择今天之前的任何日期。(因此所有过去的日期都显示为灰色,无法选择。)

您可以在此处查看测试页面上的日历:www.citycentrebudgethotel.com.au/stage/default.asp

这里是头脚本:

<!-- javascript 1/2 -->
<script type="text/javascript" src="assets/plugins/jquery/jquery.min.js"></script>

<!-- CSS Global Compulsory -->
<link rel="stylesheet" href="assets/plugins/bootstrap/css/bootstrap.min.css">
<link rel="stylesheet" href="assets/css/style.css">

<!-- CSS Implementing Plugins -->
<link rel="stylesheet" href="assets/plugins/line-icons/line-icons.css">
<link rel="stylesheet" href="assets/plugins/font-awesome/css/font-awesome.min.css">
<link rel="stylesheet" href="assets/plugins/fancybox/source/jquery.fancybox.css">
<link rel="stylesheet" href="assets/plugins/layer-slider/layerslider/css/layerslider.css">
<link rel="stylesheet" href="assets/plugins/sky-forms-pro/skyforms/css/sky-forms.css">
<link rel="stylesheet" href="assets/plugins/sky-forms-pro/skyforms/custom/custom-sky-forms.css">
<!--[if lt IE 9]><link rel="stylesheet" href="assets/plugins/sky-forms-pro/skyforms/css/sky-forms-ie8.css"><![endif]-->

<!-- CSS Customization -->
<link rel="stylesheet" href="assets/css/custom.css">

以下是页脚脚本:

<!-- JS Global Compulsory -->
<!-- JAVASCRIPT 2/2 -->
<script type="text/javascript" src="assets/plugins/jquery/jquery-migrate.min.js"></script>
<script type="text/javascript" src="assets/plugins/bootstrap/js/bootstrap.min.js"></script> 

<!-- JS Implementing Plugins -->           
<script type="text/javascript" src="assets/plugins/back-to-top.js"></script>
<script type="text/javascript" src="assets/plugins/fancybox/source/jquery.fancybox.pack.js"></script>
<script type="text/javascript" src="assets/plugins/fancybox/source/helpers/jquery.fancybox-media.js?v=1.0.0"></script>
<script type="text/javascript" src="assets/plugins/layer-slider/layerslider/js/greensock.js"></script>
<script type="text/javascript" src="assets/plugins/layer-slider/layerslider/js/layerslider.transitions.js"></script>
<script type="text/javascript" src="assets/plugins/layer-slider/layerslider/js/layerslider.kreaturamedia.jquery.js"></script>
<script type="text/javascript" src="assets/plugins/sky-forms-pro/skyforms/js/jquery-ui.min.js"></script> 

<!-- JS Customization -->
<script type="text/javascript" src="assets/js/custom.js"></script> 

<!-- JS Page Level -->           
<script type="text/javascript" src="assets/js/app.js"></script>
<script type="text/javascript" src="assets/js/plugins/layer-slider.js"></script>
<script type="text/javascript" src="assets/js/plugins/datepicker.js"></script>

<script type="text/javascript">
    jQuery(document).ready(function() 
        App.init();
        App.initFancybox();
        LayerSlider.initLayerSlider();
        Datepicker.initDatepicker();
    );
</script>

<script type="text/javascript">
    $(document).ready(function() 
        $('.fancybox-media').fancybox(
            openEffect  : 'none',
            closeEffect : 'none',
            helpers : 
                media : 
            
        );
        $('.datepicker').datepicker(
            format: 'dd MMM, yyyy',
            todayHighlight: true
        );         
    ); 
</script>

这是显示日历字段的代码:

    <form action="#" id="sky-form" class="sky-form">
        <div class="row" style="margin: auto;">
            <section class="col-md-6">
                <label class="input">
                    <i class="icon-append fa fa-calendar"></i>
                    <input type="text" name="start" id="start" placeholder="Check In Date" class="datepicker">
                </label>
            </section>
            <section class="col-md-6">
                <label class="input">
                    <i class="icon-append fa fa-calendar"></i>
                    <input type="text" name="finish" id="finish" placeholder="Check out Date" class="datepicker">
                </label>
            </section>
        </div>
    </form>

对于如何格式化日期显示以及限制过去日期的任何建议,我将不胜感激。

谢谢!

【问题讨论】:

【参考方案1】:

禁用过去的日期:

Bootstrap Datepicker 提供startDate 的选项:

https://bootstrap-datepicker.readthedocs.io/en/latest/options.html#startdate

创建一个新的 Date 对象而不给它任何选项将默认为今天:

var d = new Date():

尝试将其用于startDate 选项:

$('.datepicker').datepicker(startDate: new Date());

显示格式

引号很重要,请尝试在格式周围使用双引号:

$('.datepicker').datepicker(format: "dd MMM, yyyy", todayHighlight: true);

如果失败,我有时会发现我需要通过toDisplay 设置这个值:

$('.datepicker').datepicker(
  format: 
    // We're sending an object, not a string
    toDisplay: function (date, format, language) 
      // this gets messy, sorry
      var d = new Date(date);
      var year = new Intl.DateTimeFormat('en',  year: 'numeric' ).format(d);
      var month = new Intl.DateTimeFormat('en',  month: 'short' ).format(d);
      var day = new Intl.DateTimeFormat('en',  day: '2-digit' ).format(d);
      return day + " " + month + ", " + year;
    
  
); 

【讨论】:

感谢@chiperific 的快速回复。对于过去的日期,我看到它是 startDate 选项,但我不知道如何将其设置为今天的日期(不是特定日期,但无论 TODAY 日期是什么。)你能提供一个例子吗?对于格式日期,我尝试了您的两个建议。都没有奏效。我想也许我出于某种原因没有选择此代码?我在错误的地方上课吗?你能看到我可能编码错误而无法访问此功能的任何内容吗?其他一些插件代码会覆盖它吗? 我刚刚注意到格式选项有一个默认值:“mm/dd/yyyy”,但我的日期显示为 dd.mm.yyyy(使用句点而不是斜杠,并且还使用澳大利亚日期格式,这对我有好处,但不是默认格式)。所以如果我没有选择这个功能,那么我应该看到默认格式,我也没有这样做。所以现在我真的认为可能有另一个脚本在某个地方设置不同?有没有办法解决这个问题? 在澳大利亚日期格式上,可能是某些东西正在本地化您的格式:new Intl.DateTimeFormat('en-AU');,浏览器或 Javascript。 我为startDate 添加了一些示例代码,让您朝着正确的方向前进。【参考方案2】:

好的,我想我已经找到了问题所在。我的 bootstrap/datepicker 版本与文档引用的版本不同,并且不使用相同的变量名。这就是为什么 Chiperific 的伟大建议对我不起作用的原因。

我已经继续并将他的答案标记为正确,因为如果我有一个正常的设置,它会提供正确的解决方案。

对于遇到此类问题的其他人,我将在此处发布我的网站正在使用的 datepicker.js。此脚本已调整为以我想要的格式显示日期,并且也不允许选择过去的日期:

var Datepicker = function () 

  return 
    
    //Datepickers
    initDatepicker: function () 
        // Regular datepicker
        $('#date').datepicker(
            dateFormat: 'dd MM, yy',
            prevText: '<i class="fa fa-angle-left"></i>',
            nextText: '<i class="fa fa-angle-right"></i>'
        );
        
        // Date range
        $('#start').datepicker(
            dateFormat: 'dd MM, yy',
            prevText: '<i class="fa fa-angle-left"></i>',
            nextText: '<i class="fa fa-angle-right"></i>',
            minDate: 'TODAY()',
            onSelect: function( selectedDate )
            
                $('#finish').datepicker('option', 'minDate', selectedDate);
            
        );
        $('#finish').datepicker(
            dateFormat: 'dd MM, yy',
            prevText: '<i class="fa fa-angle-left"></i>',
            nextText: '<i class="fa fa-angle-right"></i>',
            onSelect: function( selectedDate )
            
                $('#start').datepicker('option', 'maxDate', selectedDate);
            
        );
        
        // Inline datepicker
        $('#inline').datepicker(
            dateFormat: 'dd MM, yy',
            prevText: '<i class="fa fa-angle-left"></i>',
            nextText: '<i class="fa fa-angle-right"></i>'
        );
        
        // Inline date range
        $('#inline-start').datepicker(
            dateFormat: 'dd MM, yy',
            prevText: '<i class="fa fa-angle-left"></i>',
            nextText: '<i class="fa fa-angle-right"></i>',
            onSelect: function( selectedDate )
            
                $('#inline-finish').datepicker('option', 'minDate', selectedDate);
            
        );
        $('#inline-finish').datepicker(
            dateFormat: 'dd MM, yy',
            prevText: '<i class="fa fa-angle-left"></i>',
            nextText: '<i class="fa fa-angle-right"></i>',
            onSelect: function( selectedDate )
            
                $('#inline-start').datepicker('option', 'maxDate', selectedDate);
            
        );
    

  ;
();

【讨论】:

以上是关于Bootstrap 3 datepicker:更改日期显示格式;防止在今天日期之前选择日期的主要内容,如果未能解决你的问题,请参考以下文章

减小 bootstrap-datepicker 字段的大小并更改文本颜色

在更改时验证 bootstrap-datepicker 字段

BootStrap DatePicker 日历输入更改不更新日历

text 更改日期格式Ng-bootstrap Datepicker Angular 5

如何使用 bootstrap-datepicker 更新多个输入

更改 Bootstrap Datepicker 日期范围的可选范围