将日期和时间转换为 JavaScript 日期格式

时间:2020-12-19 06:06:37

标签: javascript html date datetime

我正在尝试通过 HTML 表单从用户那里获取日期和时间来安排任务。

HTML:

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

JavaScript:

let date=document.getElementById('date')
let time=document.getElementById('time')

现在我想将此日期和时间转换为 JavaScript 日期对象。我想得到下面这个字符串的输出,以及用户给定的相应日期和时间。

Sat Dec 19 2020 11:31:21 GMT+0530 (India Standard Time)

有人能帮我解决这个问题吗?提前致谢

3 个答案:

答案 0 :(得分:0)

input 标签触发器获取数据会很有帮助。 input 的数据在脚本中定义为 value。所以下面使用了 onclick 事件:

let button1 = document.getElementById('test');
let date = document.getElementById('date');
let time = document.getElementById('time');
function testFunction(e) {
console.log(date.value, time.value)
}
<form>
<input name="date" type="date" id="date">
<input name="time" type="time" id="time">
<input name="submit" onclick="testFunction()" type="button" value="click me" id="test">
</form>

答案 1 :(得分:0)

这是多个问题合二为一。

并非所有使用的浏览器都支持输入类型日期,因此在这些情况下需要回退选项。在支持日期输入的情况下,该值将作为 yyyy-mm-dd 格式的字符串返回。默认情况下,它被解析为 UTC,但大多数人希望它被视为本地,以便也需要处理。

时间输入的值以 hh:mm:ss 格式返回,因此也需要解析为某种可用的形式。

简单的答案是将日期和时间值与“T”连接起来(产生 yyy-mm-ddThh:mm:ss 格式)并将其留给内置解析器,因为它应该 被解析为本地,但可能不是(见 Why does Date.parse give incorrect results?

更可靠的解决方案是分别解析日期和时间,然后组合这些值。您可以使用库,但简单的函数只有几行。

下面演示了这两种方法,希望注释足够。

// Parse yyyy-mm-dd as local
function parseISOLocal(s) {
  let [y, m, d] = s.split(/\D/);
  return new Date(y, m-1, d);
}
// Parse hh:mm:ss to ms
function parseTime(t) {
  let [h, m, s] = t.split(/\D/);
  return h*3.6e6 + m*6e4 + s*1e3;
}

// Create Date from combined date and time inputs
function getDate() {
  // Get date string, parse as local
  let d = parseISOLocal(document.getElementById('date').value);
  // Get time, convert to milliseconds
  let t = parseTime(document.getElementById('time').value);
  // Add time to date
  d.setMilliseconds(d.getMilliseconds() + t);
  // Debug
  console.log(d.toString());
  // Return date
  return d;
}

// Create date by concatenating date and time and
// using built-in parser
function getDate2(){
  // Get date string
  let d = document.getElementById('date').value;
  // Get time string
  let t = document.getElementById('time').value;
  // Debug
  console.log(new Date(d + 'T' + t).toString());
  // Join with T and use built-in parser
  return new Date(d + 'T' + t);
}
<input name="date" type="date" id="date" value="2020-12-12">
<input name="time" type="time" id="time" value="12:12:12">
<br>
<button onclick="getDate()">Get date manual parse</button>
<button onclick="getDate2()">Get date built-in parse</button>

还有输入类型 datetime(过时)和 datetime-local,但缺乏支持,因此不可行的选项。

答案 2 :(得分:-1)

试试这个:

    let btn = document.getElementById('btn');

    btn.addEventListener('click', () => {
        let year = document.getElementById('year').value;
        let month = document.getElementById('month').value;
        let day = document.getElementById('day').value;
        let hours = document.getElementById('hours').value;
        let minutes = document.getElementById('minutes').value;
        let seconds = document.getElementById('seconds').value;
        
        let result = new Date(year, month, day, hours, minutes, seconds, 0);
        console.log(result);
        return result;
    })
    <input name="year" placeholder="year" type="number" id="year">
    <input name="month" placeholder="month" type="number" id="month">
    <input name="day" placeholder="day" type="number" id="day">
    <input name="hours" placeholder="hours" type="number" id="hours">
    <input name="minutes" placeholder="minutes" type="number" id="minutes">
    <input name="seconds" placeholder="seconds" type="number" id="seconds">

    <button type="button" id="btn">Get Date</button>