You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Tempus Dominus Bootstrap4 DateTimePicker遇错求助(Laravel环境)

解决Laravel项目中集成Tempus Dominus Bootstrap4 DateTimePicker的常见问题

嘿,我帮你梳理下在Laravel(用laravel-mix构建)里集成这款日期时间选择器的常见问题和解决步骤——这类组件的坑大多集中在依赖加载顺序、mix配置或者初始化代码上,咱们一步步来:

1. 先把依赖包装对

首先确保你已经安装了所有必需的包,打开项目根目录的终端,执行:

npm install tempusdominus-bootstrap-4 moment --save-dev

2. 配置laravel-mix,注意加载顺序

这一步很关键,moment.js必须在Tempus Dominus之前加载,否则会直接报错找不到moment。有两种配置方式:

方式一:单独打包资源到指定文件

修改webpack.mix.js,添加对Tempus Dominus的CSS和JS的打包:

mix.js('resources/js/app.js', 'public/js')
   .sass('resources/sass/app.scss', 'public/css')
   // 打包Tempus Dominus的CSS
   .styles([
       'node_modules/tempusdominus-bootstrap-4/build/css/tempusdominus-bootstrap-4.min.css'
   ], 'public/css/tempusdominus.css')
   // 按顺序打包moment和Tempus Dominus的JS
   .scripts([
       'node_modules/moment/min/moment.min.js',
       'node_modules/tempusdominus-bootstrap-4/build/js/tempusdominus-bootstrap-4.min.js'
   ], 'public/js/tempusdominus.js');

方式二:ES模块引入(更简洁)

直接在resources/js/app.js里引入依赖,这样不用额外配置mix的styles/scripts:

// 引入moment并挂载到全局,让Tempus Dominus能访问到
import moment from 'moment';
window.moment = moment;

// 引入Tempus Dominus的JS和CSS
import 'tempusdominus-bootstrap-4';
import 'tempusdominus-bootstrap-4/build/css/tempusdominus-bootstrap-4.min.css';

配置完后,记得执行npm run dev(开发环境)或者npm run prod(生产环境)编译资源。

3. 在Blade模板里正确引入资源

如果用的是方式一的单独打包,要在你的模板(比如layouts.app)里引入编译后的文件:

<!-- 在<head>标签里引入CSS -->
<link rel="stylesheet" href="{{ asset('css/tempusdominus.css') }}">

<!-- 在</body>标签前引入JS -->
<script src="{{ asset('js/tempusdominus.js') }}"></script>

如果用的是方式二的ES模块引入,只要确保你的模板已经引入了app.js和app.css就行——Laravel默认的layouts.app里已经包含了这些,所以不用额外加。

4. 正确初始化日期选择器

在你的@section('content')里添加input元素,然后写初始化脚本,注意组件的DOM结构要符合要求:

@section('content')
@if((Auth::user()->hasRole('teacher')) || (Auth::user()->hasRole('admin')) || (Auth::user()->hasRole('superadmin')) )
<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">日期时间选择器</div>
                <div class="card-body">
                    <!-- 日期选择器的DOM结构 -->
                    <div class="form-group">
                        <label for="datetimepicker">选择日期时间</label>
                        <div class="input-group date" id="datetimepicker" data-target-input="nearest">
                            <input type="text" class="form-control datetimepicker-input" data-target="#datetimepicker"/>
                            <div class="input-group-append" data-target="#datetimepicker" data-toggle="datetimepicker">
                                <div class="input-group-text"><i class="fa fa-calendar"></i></div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
@endif

<!-- 初始化脚本 -->
<script>
$(function () {
    $('#datetimepicker').datetimepicker({
        // 可以添加自定义配置,比如日期格式
        format: 'YYYY-MM-DD HH:mm:ss',
        // 如果需要中文界面,先安装moment中文包:npm install moment/locale/zh-cn
        // 然后在app.js里引入:import 'moment/locale/zh-cn'; 再在这里设置locale
        locale: 'zh-cn'
    });
});
</script>
@endsection

5. 常见错误排查

如果还是报错,先检查这几点:

  • moment is not defined:说明moment没有挂载到全局,在app.js里加上window.moment = moment;就行。
  • $(...).datetimepicker is not a function:要么是Tempus Dominus的JS没加载,要么是加载顺序错了,检查mix配置和模板里的引入顺序。
  • 路径错误:执行编译命令后,检查public/css和public/js下是否生成了对应的文件,asset()函数的路径是否正确。
  • jQuery未加载:Laravel默认的app.js已经包含jQuery,只要模板里引入了app.js就没问题,别重复引入旧版本的jQuery导致冲突。

内容的提问来源于stack exchange,提问作者Hayreddin Tüzel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:22:10