【问题标题】:How do I pass the value of an input type time to a Date object?如何将输入类型时间的值传递给 Date 对象?
【发布时间】:2015-11-15 02:08:00
【问题描述】:

此函数将时间转换为 12 小时格式,感谢 Stack Overflow 上此函数的贡献者:

JS

function ampm(date) {
    var hours = date.getHours();
    var minutes = date.getMinutes();
    var ampm = hours >= 12 ? 'pm' : 'am';
    hours = hours % 12;
    hours = hours ? hours : 12; // 0 should be 12
    minutes = minutes < 10 ? '0'+minutes : minutes; // if minutes less than 10, add a 0 in front of it ie: 6:6 -> 6:06
    var strTime = hours + ':' + minutes + ' ' + ampm;
    document.getElementById('time').value = strTime;
    return strTime;
}

////This is how the value of the time input is supposed to be displayed in 12 hr format
_("display_time").innerHTML = ampm(new Date());

HTML

<!--This is the input field where a user selects a time-->
<input id="time" placeholder="Time" type="time" name="time" />




<!--This is where the value of the time input is supposed to be displayed in 12 hr format-->>
<span id="display_time"></span> 

我的问题是如何让时间输入字段的值以 12 小时格式显示在跨度标签上。这段代码是半工作的。

它以 12 小时格式显示时间,但仅显示当前时间。流程图类似于,用户选择时间输入 -> 一些 JS 转换为 12hr 格式 -> 在 span 标签中显示为 12hr 格式。有什么意见或建议吗?

【问题讨论】:

  • 老实说,这似乎让你的生活变得复杂。有很多关于时间和日期对象的 stackoverflow 问题提出了更简单的解决方案。你只需要搜索一下。
  • 你打算如何让用户“选择时间输入”?那个时间是什么格式(字符串?时间?时间戳?)

标签: javascript html time


【解决方案1】:

您的输入值将是一个字符串,而不是日期。我已经设置了一个jsfiddle,我在其中修改了您的 javascript 以处理字符串。

$('#time').on('change', function() {
    var date = $('#time').val().split(':');

    var hours = date[0];
    var minutes = date[1];

    $('#display_time').text(ampm(hours, minutes));
});

function ampm(hours, minutes) {
    var ampm = hours >= 12 ? 'pm' : 'am';
    hours = hours % 12 || 12;
    minutes = minutes || 0;
    minutes = minutes < 10 ? '0'+minutes : minutes;
    return hours + ':' + minutes + ' ' + ampm;
}

【讨论】:

    【解决方案2】:

    没有必要使用Date及其方法,输入是String,所以你最好使用.split(":")方法,你会直接得到hoursminutes的值。

    然后只需测试它们的值是否低于10 添加前导0 并且如果hours 高于12 使用pm 后缀或使用am 否则。

    这是一个使用时间输入的onchange事件的现场演示,其值作为参数onchange="ampm(this.value)

    function ampm(time) {
    
      console.log(time);
      if (time.value !== "") {
        var hours = time.split(":")[0];
        var minutes = time.split(":")[1];
        var suffix = hours >= 12 ? "pm" : "am";
        hours = hours % 12 || 12;
        hours = hours < 10 ? "0" + hours : hours;
    
        var displayTime = hours + ":" + minutes + " " + suffix;
        document.getElementById("display_time").innerHTML = displayTime;
      }
    }
    <!--This is the input field where a user selects a time-->
    <input id="time" placeholder="Time" type="time" name="time" onchange="ampm(this.value)" />
    <span id="display_time"></span>

    【讨论】:

    • var hours = time.split(":")[0] 中的“0”是什么意思?与 var 分钟中的 '1' 相同吗?
    • @ArvinFlores 这些是索引,因为 split 会给出一个数组作为结果,所以[0] 我们得到第一个元素,[1] 我们得到第二个元素。
    • 好的。在 var 后缀中,它不应该是 >= 12 而不是 >12 吗?因为它会从上午 11:59 到上午 12:00 而不是下午 12:00?
    【解决方案3】:

    这样就可以了

    function showTime() {
        //Grab the time and split into hrs and mins
        var time = document.getElementById("time");
        if ( time.value === "")  {
            document.getElementById("mySpan").innerHTML = "";
            return false;
        }
        var hrs = time.value.split(":")[0];
        var mins = time.value.split(":")[1];
        var newTime = ampm(hrs, mins);
        document.getElementById("mySpan").innerHTML = newTime;
    }
    
    function ampm(hrs, mins) {
        return ( hrs % 12 || 12 ) + ":" + mins + (( hrs >= 12 ) ? "PM" : "AM" );
    }
    

    Here 就是一个例子。 showTime() 只需要在时间输入改变时运行。

    【讨论】:

    • @RobG 这会起作用,除非你仍然需要为 12 单独声明,因为当它大于 12 时,我们需要删除 12 来表示 12 小时时钟
    • @RobG 我已经进行了编辑。它更优雅一点,谢谢
    • (function(h,m){return(h%12||12)+':'+m+(h&lt;12?'am':'pm')}.apply([],'13:08'.split(':')))
    猜你喜欢
    • 2012-07-20
    • 2015-08-13
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    相关资源
    最近更新 更多