timepicker与当前日期验证

问题描述 投票:0回答:2

我想要一个时间字段添加javascript,以便它不需要当前日期的当前或以前的时间..它也不应该比当前日期的当前时间多4小时...例如:如果日期是2018-03-03,时间是13:00:00,那么当前日期的时间不应少于17:00:00 ..时间格式为hh:mm:ss。我将以yyyy-mm-dd格式在另一个字段中显示日期。这是我试过的代码。请告诉我可以改变什么。

function currtime()
var tm = document.getElementById("ptime");
var pd = document.getElementById("pdate");

var now =new date();
var select = new Date(now.getFullYear(),now.getMonth(),now.getDate());
var specific = new Date(pd);

if  ((specific == select) && (tm <= now)){
alert("incorrect time for today");
return false;
}

else {
return true;
}
javascript html date time
2个回答
0
投票

您的代码存在许多问题。

function currtime()
  var tm = document.getElementById("ptime");
  var pd = document.getElementById("pdate");

tm和pd的值是HTML元素(或null)。猜测它们是HTML时间和日期输入,您希望获得它们的值:

  var tm = document.getElementById("ptime").value;
  var pd = document.getElementById("pdate").value;

然后有:

var now =new date();
var select = new Date(now.getFullYear(),now.getMonth(),now.getDate());

如果您希望在00:00:00选择为当前日期的日期,那么获取日期并将时间部分归零会更简单:

var select = new Date();
select.setHours(0,0,0,0);

无论如何,你不需要这样做。然后有:

var specific = new Date(pd);

假设pd是一个ISO 8601格式的日期,如2018-03-04,那么它将被解析为UTC,因此时间将偏移到主机系统偏移量。可能你希望它解析为本地。因此,您可以编写一个简单的函数来将pd的值解析为local,或者为本地日期构建ISO 8601格式的日期字符串并进行比较。

但是为什么不使用tm和pd中的值创建一个Date,然后将它与现在进行比较,看看时差是否超过4小时(或14.4e6ms)?如果您希望它在同一天并且在4小时内,则需要更多逻辑。

function within4Hours() {
  // Get date and time values as array of parts
  var d = document.getElementById('pdate').value.split('-');
  var t = document.getElementById('ptime').value.split(':');
  // Create date from parts
  var date = new Date(d[0], d[1]-1, d[2], t[0], t[1]);

  // Return true if difference is < 4hrs, otherewise false 
  return Math.abs(date - Date.now()) <= 1.44e7;
}
Date: <input type="date" id="pdate" value="2018-03-04"><br>
Time: <input type="time" id="ptime" value="10:23"><br>
<button onclick="console.log(within4Hours())">Within 4 hours of now?</button>

请注意,这会检查现在提供的时间是否为4小时。如果您以后只想要它,请在return语句中调整测试。


0
投票

您可以使用spread syntax在一行中创建指定日期,然后您可以使用关系运算符比较日期:

function currtime() {
    var tm = document.getElementById("ptime").value.split('-');
    var pd = document.getElementById("pdate").value;

    var specified = new Date(tm[0], tm[1] - 1, tm[2], ...tm.split(':'));
    var select = new Date();

    if (specified < select || specified > select.setHours(select.getHours() + 4)){
        alert("incorrect time for today");
        return false;
    } else {
        return true;
    }   
}
© www.soinside.com 2019 - 2024. All rights reserved.