【问题标题】:Check date and time comparison in Javascript检查Javascript中的日期和时间比较
【发布时间】:2016-02-08 12:35:16
【问题描述】:

我有4 textboxes 用于日期,每个textbox 都有dropdownlist 用于时间。

现在我想要的是,

每个文本框的日期可以相同,但所有下拉列表中的时间不应相同。

例如:-

如果每个文本框中的日期是

textbox1: 08/02/2016
textbox2: 08/02/2016
textbox3: 08/02/2016
textbox4: 08/02/2016

时间不应该一样,应该是

ddl1 = 9.00
ddl2 = 10.00
ddl3 = 11.00
ddl4 = 12.00

我试过的如下:-

 function ValidateRecord() {
    var StrPriError = "";
    if (document.getElementById('TextBox1').value == document.getElementById('TextBox2').value || document.getElementById('TextBox3').value || document.getElementById('TextBox4').value) {
        if (document.getElementById('DrpTime').value == document.getElementById('DrpTime3').value || document.getElementById('DrpTime4').value || document.getElementById('DrpTime5').value) {
            StrPriError += "Dates and Time for RA Reminder cannot be same";
        }
    }
    if (StrPriError != "") {
        alert(StrPriError);
        return false;
    }
    else {
        return true;
    }
}

但即使我添加不同的时间,它也不起作用。请建议

另外,请参阅 HTML 的屏幕截图

更新

日期格式为dd/MM/yyyy

【问题讨论】:

  • if (document.getElementById('DrpTime').value == document.getElementById('DrpTime3').value || document.getElementById('DrpTime4').value || document.getElementById('DrpTime5').value) { -- 这是一个无效条件,总是返回 true。
  • @PraveenKumar:哦,那么正确的逻辑是什么?任何想法
  • 你查时间的方式不对。此外,如果必须检查,则需要将它们全部检查为Date 对象。
  • @PraveenKumar:是的,我已经处理了日期部分。请告诉我检查的CONDITION
  • @coder - 您正在尝试条件A == (B or C or D)。这永远不会起作用(通常是语法错误,但在 javascript 中,“C”和“D”被评估为它们的“真实值”——你不想要这里)。你需要(A == B) or (A == C) or (A == D)

标签: javascript asp.net


【解决方案1】:

您查看时间的方式是错误的。此外,如果必须检查,则需要将它们全部检查为Date 对象。

所以你需要这样做,假设这些是你的日期文本框:

  • TextBox1
  • TextBox2
  • TextBox3
  • TextBox4

时间是:

  • DrpTime
  • DrpTime3
  • DrpTime4
  • DrpTime5

现在,您需要创建四个 Date 对象,其中包含 both 日期和时间。所以说:

var dt1 = new Date(document.getElementById('TextBox1').value + " " + document.getElementById('DrpTime').value);
var dt2 = new Date(document.getElementById('TextBox2').value + " " + document.getElementById('DrpTime3').value);
var dt3 = new Date(document.getElementById('TextBox3').value + " " + document.getElementById('DrpTime4').value);
var dt4 = new Date(document.getElementById('TextBox4').value + " " + document.getElementById('DrpTime5').value);

现在你需要比较如果有任何两个这样的话,你会得到6个比较:

dt1.getTime() == dt2.getTime()
dt1.getTime() == dt3.getTime()
dt1.getTime() == dt4.getTime()
dt2.getTime() == dt3.getTime()
dt2.getTime() == dt4.getTime()
dt3.getTime() == dt4.getTime()

因此,无效值的if 条件将是:

if (dt1.getTime() == dt2.getTime() || dt1.getTime() == dt3.getTime() || dt1.getTime() == dt4.getTime() || dt2.getTime() == dt3.getTime() || dt2.getTime() == dt4.getTime() || dt3.getTime() == dt4.getTime())
    // Error

扩展版(仅供演示)是:

if (
    dt1.getTime() == dt2.getTime() || dt1.getTime() == dt3.getTime() || dt1.getTime() == dt4.getTime() ||
    dt2.getTime() == dt3.getTime() || dt2.getTime() == dt4.getTime() ||
    dt3.getTime() == dt4.getTime()
)
    // Error

我们正在比较所有日期,所以即使一个条件为真,您也会得到,即一个日期也等于另一个日期,那么您需要告诉用户这是一个错误。

确保文本框中的日期值格式为:

YYYY/MM/DD

如果没有,这将不起作用。

工作片段

label {display: block;}
Dates
<label>Date 1: <input type="date" id="TextBox1"></label>
<label>Date 2: <input type="date" id="TextBox2"></label>
<label>Date 3: <input type="date" id="TextBox3"></label>
<label>Date 4: <input type="date" id="TextBox4"></label>

Times
<label>Time 1: <input type="text" id="DrpTime"></label>
<label>Time 2: <input type="text" id="DrpTime3"></label>
<label>Time 3: <input type="text" id="DrpTime4"></label>
<label>Time 4: <input type="text" id="DrpTime5"></label>

<button onclick="calc8();">Calculate</button>

<script>
  function calc8() {
    var dt1 = new Date(document.getElementById('TextBox1').value + " " + document.getElementById('DrpTime').value);
    var dt2 = new Date(document.getElementById('TextBox2').value + " " + document.getElementById('DrpTime3').value);
    var dt3 = new Date(document.getElementById('TextBox3').value + " " + document.getElementById('DrpTime4').value);
    var dt4 = new Date(document.getElementById('TextBox4').value + " " + document.getElementById('DrpTime5').value);
    if (dt1.getTime() == dt2.getTime() || dt1.getTime() == dt3.getTime() || dt1.getTime() == dt4.getTime() || dt2.getTime() == dt3.getTime() || dt2.getTime() == dt4.getTime() || dt3.getTime() == dt4.getTime())
    // Error
      alert("Equal Times Detected");
    else
      alert("Good to go!");
  }
</script>

说明

  1. 对所有人使用相同的日期(比如 2 月 1 日,使用日期选择器)。
  2. 对所有人使用不同的时间(比如1:002:003:004:00)。
  3. 点击按钮,应该说好的。

【讨论】:

  • 请注意,y/m/d 格式不符合任何标准,包括 ECMA-262,并且不会被当前至少一种流行浏览器的最新版本解析为有效日期使用(符合标准)。此外,即使对于那些会解析它的人,有些人会允许超出范围的值,而其他人则不会。
  • “最佳”取决于标准。由于有一个 asp.net 标签,因此日期组件可能是 OP 配置为某种格式的小部件。它至少应该有一个屏幕提示来指示所需的格式。无论如何,选择的值是一个字符串,如果它由日历小部件控制,那么 OP 只需直接比较字符串日期值。但可能还有其他因素,就是“信息不足”的情况。
  • @RobG 我要不要让 OP 使用type="date"
  • @PraveenKumar:对不起,我忘了在我的问题中提到日期格式。我会更新的
  • 感谢 praveenkumar,根据您的代码,它对我有用 :)
猜你喜欢
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2017-08-08
  • 1970-01-01
  • 2012-04-20
  • 1970-01-01
相关资源
最近更新 更多