【问题标题】:How convert input type="date" in a timestamp?如何在时间戳中转换输入类型 =“日期”?
【发布时间】:2017-10-25 10:18:19
【问题描述】:

我需要在时间戳中转换 <input type="date"> 值。这是我的 HTML 代码:

 <input type="date" name="date_end" id="date_end">

这个字段有一个值,我输入了25/10/2017

我的 jQuery 代码是:

var dataEnd = $('[name="date_end"]').val();
        if (!dataEnd) {
            return false;
        } else {
            var timestamp_end=$('[name="date_start"]').val().getTime();
            console.log("TIMESTAMP END "+timestamp_end);
.....
}

但这不起作用......为什么不呢?

【问题讨论】:

  • 也许new Date(parseInt($('[name="date_start"]').val(), 10)) 会有所帮助?
  • 能否添加HTML代码
  • @sunpietro — 输入类型日期的值是 ISO 8601 格式的日期字符串,例如“2017-10-24”。将其提供给 parseInt 将返回数字 2017。如果将该值传递给 Date 构造函数,它将被视为自纪元以来的毫秒数,并导致 1970-01-01T00:00 的日期: 02.017Z。所以不,它不会以某种方式帮助。

标签: javascript html jquery date timestamp


【解决方案1】:

创建一个新的Date(),将输入的值作为参数传递,然后调用getTime()。这是一个例子:

$('[name="date_end"]').on('change',function() {
  var dataEnd = $(this).val();
  console.log((new Date(dataEnd)).getTime());
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="date" name="date_end" id="date_end">

【讨论】:

  • 你应该小心。从输入类型 date 返回的值是 ISO 8601 格式的日期字符串。如果由与 ECMA-262 的最新版本一致的内置解析器解析,它将被解释为 UTC。因此,如果用户的时区是 UTC-0800,并且在晚上 10 点选择了 2017-10-26 的日期,那么 UTC 日期将是 2017-10-27,这可能会让人感到意外。
【解决方案2】:

这样做

var dateEnd = $('#date_end').val()
var var timestamp_end = Date.parse(date_end)

或 在一行中

var timestamp_end = Date.parse($('#date_end').val())

它可以工作而且很干净

【讨论】:

    【解决方案3】:

    这是一个解决方案(使用纯js),我在将值转换为javascript日期对象后使用了一元加运算符运算符。

    function checkDateValue(){
      var dateConvertedToTimestamp = (+new Date(document.getElementById('date_value').value));
      
      document.getElementById('date_value_timestamp').innerHTML  = dateConvertedToTimestamp ;
    }
    <input type='date' id='date_value'>
    <button onClick='checkDateValue()'> Submit </button>
    
    <div>Timestamp:- <span id='date_value_timestamp'></span></div>

    【讨论】:

    • 日期输入返回的值是一个 ISO 8601 格式的日期字符串,如 2017-10-26,当用户可能期望它被解析为本地。
    • @RobG 获取本地时区特定时间戳,您可以使用 Date 对象的 getTimezoneOffset 原型方法。
    • 您完全错过了重点:用户可能希望将该值视为本地值,但您的函数会将其视为 UTC。因此,它将代表与用户期望的时间不同的时刻(因此具有不同的时间戳,无论格式如何)。
    • @RobG 在这种情况下,请您提出一些会产生用户期望值的建议。
    【解决方案4】:

    我需要一个 UNIX 时间戳,并根据我的需要更新了 Partha Roy 的 anwser。

    Javascript:

      document.getElementById('dateInput').addEventListener('change', function (){
            
      let inputDate = document.getElementById('dateInput').value ;
      let dateConvertedToTimestamp = new Date(inputDate).getTime() ;
      console.log(dateConvertedToTimestamp) ;
      document.getElementById('resultTime').value = dateConvertedToTimestamp / 1000 ;
        }) ;
    

    /1000 除法转换为 UNIX 时间戳 + 我跟踪所有输入更改,而不仅仅是在提交表单时。

    HTML:

    <input type='date' id='dateInput'>
    <input type='hidden' id='resultTime' name='dateTimestamp'>
    

    不要忘记日期输入仍然没有得到很好的支持,所以我们可以很容易地用经典的数字输入来调整这段代码。

    【讨论】:

      【解决方案5】:

      您可以使用以下代码

      <script type="text/javascript">
      var d = new Date(parseInt($('[name="date_start"]').val()));
      var n = d.getTime();
      console.log(n);
      </script>
      

      【讨论】:

      • 日期输入返回的值是 ISO 8601 格式的日期字符串,例如 2017-10-26。将其提供给 parseInt 将产生数字 2017,当传递给日期构造函数时,会产生 1970-01-01T00:00:02.017Z 的日期。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-15
      • 2021-08-17
      • 2015-11-24
      • 2020-12-14
      • 2021-01-23
      • 1970-01-01
      相关资源
      最近更新 更多