【问题标题】:How to create dynamic datetimepicker value?如何创建动态 datetimepicker 值?
【发布时间】:2017-07-31 13:11:16
【问题描述】:

我的 HTML 代码如下:

$(function () {                
    $('#datetimepicker').datetimepicker({
        minDate: moment().startOf('minute').add(300, 'm'),
    });
    
    $("#btnSubmit").click(function() {
        value = document.getElementById('datetimepicker').value;
        console.log(value)
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js"></script>

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/css/bootstrap-datetimepicker.min.css" rel="stylesheet"/>


<div class="container">
    <div class="row">
        <div class='col-sm-6'>
            <div class="form-group">
                <input type='text' class="form-control" id='datetimepicker' />
            </div>
        </div>
    </div>
</div>
<button id="btnSubmit">
    Submit
</button>

这样的演示:https://jsfiddle.net/oscar11/8jpmkcr5/83/

如果我点击提交按钮,我会成功获得 300 分钟后的日期时间值

但是如果在提交之前,我等了10分钟,结果不符合我的预期

例如现在 6 点。在提交之前,我等待 10 分钟。提交后,我得到的时间值是11.10。所以我想喜欢它

我该怎么做? 如何使自动日期时间值增加?

更新

textfield中的时间值是否可以根据当前时间自动增加?

【问题讨论】:

  • 您希望时间是从当前点击提交时间起的 300 分钟?日/月/年是用户选择的,还是当前选择的?
  • @sadlyblue,是的,日/月/年也是当前的

标签: javascript jquery twitter-bootstrap datetimepicker eonasdan-datetimepicker


【解决方案1】:

不知道你为什么需要它,但你可以使用类似的东西:

$("#btnSubmit").click(function() {
    var targetDate = new Date(new Date().getTime() + (300 * 60 * 1000));
    $('#datetimepicker').data("DateTimePicker").date(targetDate);

   value = document.getElementById('datetimepicker').value;
   console.log(targetDate, value);
});

点击后,它会将 datetimepicker 更改为当前日期 + 300 分钟。 我已经更新了示例:https://jsfiddle.net/8jpmkcr5/86/

编辑: 根据您的最新评论,我相信您希望用户能够选择日期(日/月/年),但时间(小时/分钟)随着时间流逝到当前时间 + 3 小时而不断变化。如果是这样的话,你可以使用类似的东西:

$(function () {                
  $('#datetimepicker').datetimepicker({
        minDate: moment().startOf('minute').add(180, 'm'),
    });
});

setInterval(function(){
    var pickedDate = $('#datetimepicker').data('DateTimePicker').date();
    var currentDate = moment();
    pickedDate = pickedDate.set({
            'hour' : currentDate.get('hour') + 3,
            'minute'  : currentDate.get('minute'), 
            'second' : currentDate.get('second')
         });
    $('#datetimepicker').data("DateTimePicker").date(pickedDate);
 },1000);

你可以在这里测试:https://jsfiddle.net/8jpmkcr5/98/

【讨论】:

  • textfield中的时间值是否可以根据当前时间自动增加?
  • 所以你不需要日期选择器?只是一个显示当前时间加上 300 分钟的字段?
  • 我也需要一个日期选择器。但我希望在不点击提交按钮的情况下自动增加时间
【解决方案2】:

您可以在每次点击和/或每分钟更新它

function updateTime(){
$('#datetimepicker').data("DateTimePicker").date(moment().startOf('minute').add(180, 'm'));
};

$(function () {                
  $('#datetimepicker').datetimepicker({
        minDate: moment().startOf('minute').add(180, 'm'),
    });
});


$("#btnSubmit").click(function() {
    updateTime();
  value = document.getElementById('datetimepicker').value;
  console.log(value)
  });

setInterval(function(){
   updateTime();
},60000);

检查 https://jsfiddle.net/8jpmkcr5/88/

无论如何,选择器的想法是让用户选择,使用它并强制某个日期有什么意义?

【讨论】:

  • textfield中的时间值是否可以根据当前时间自动增加?
  • DateTimePicker。更新DateTimePicker没有严格的解决方案,因为它还有另一个作用。你应该找个时钟。
  • 是的,如果是这样,文本字段可能也有相同的方法,那么现在使用 DateTimePicker 有什么意义呢?
【解决方案3】:

您可以尝试不同的方法并像这样添加 300 分钟的提交时间:

$(function () {                
    $('#datetimepicker').datetimepicker({
        minDate: moment().startOf('minute').add(300, 'm'),
    });
    
    $("#btnSubmit").click(function() {
        value = document.getElementById('datetimepicker').value;
        var d1 = new Date (),
        d2 = new Date ( value );
        d2.setMinutes ( d1.getMinutes() + 300 );
        console.log(moment(d2).format("YYYY-MM-DD HH:mm:ss"));
    });
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script type="text/javascript" src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.9.0/moment-with-locales.js"></script>
  <script src="//cdn.rawgit.com/Eonasdan/bootstrap-datetimepicker/e8bddc60e73c1ec2475f827be36e1957af72e2ea/src/js/bootstrap-datetimepicker.js"></script>
<div class="container">
    <div class="row">
        <div class='col-sm-6'>
            <div class="form-group">
                    <input type='text' class="form-control" id='datetimepicker' />
            </div>
        </div>
    </div>
</div>
<button id="btnSubmit">
Submit
</button>

【讨论】:

  • textfield中的时间值是否可以根据当前时间自动增加?
  • @SuccessMan 是的。您可以通过运行 sn-p 并等待一段时间然后按提交来检查。
  • 我的意思是不点击提交按钮时间自动增加
【解决方案4】:
  var date = convertUTCDateToLocalDate(new Date(startdate));
    date = moment(date, 'DD/MM/YYYY HH:mm').format("DD/MM/YYYY HH:mm");
    date = date.toLocaleString();
    $('#datetimepicker7').data("DateTimePicker").date(date);
//Covert date to universal date
function convertUTCDateToLocalDate(date) {
    var newDate = new Date(date.getTime() + date.getTimezoneOffset() * 60 * 1000);

    var offset = date.getTimezoneOffset() / 60;
    var hours = date.getHours();

    newDate.setHours(hours - offset);

    return newDate;
}

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
猜你喜欢
  • 1970-01-01
  • 2020-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-11
相关资源
最近更新 更多