【问题标题】:Javascript: Date Issue while validating in JavaScript functionJavascript:在 JavaScript 函数中验证时出现日期问题
【发布时间】:2023-03-11 06:26:02
【问题描述】:

在Javascript函数中:

if (Tim2Val > Tim3Val && Tim2Val < Tim4Val)
    return true;
else
    return false;

如果我有类似的变量

Tim1Val=  8:00;
Tim2Val= 23:00;
Tim3Val= 01:00;
Tim4Val= 05:00

它正在返回 true。 (它应该返回 false。你能告诉我我们如何解决这个问题吗?)

如果我有类似的变量

Tim1Val=  8:00;
Tim2Val= 23:00;
Tim3Val= 02:00;
Tim4Val= 05:00;

它返回 false。

函数 fn_ConvTo24Format(MsTimeVal) { 如果(MsTimeVal=='') { 返回-1; } var A = MsTimeVal.split(/\D+/); var locAMPos = MsTimeVal.indexOf('AM'); var locPMPos = MsTimeVal.indexOf('PM');

 if(locAMPos ==-1 && locPMPos ==-1)
 {
  return MsTimeVal;
 }
 if(locAMPos!= -1 && A[0] + '.' + A[1]=='12.00' )
 {
  return 0;

 }
 if(locPMPos!= -1 && A[0] + '.' + A[1]=='12.00' )
 {
  return 12;

 }

 if(locAMPos!= -1 && A[0] + '.' + A[1]=='12.00' )
 {
  return 0;

 }

 if(locAMPos!= -1)
 {
  return A[0] + '.' + A[1];
 }
 if(locPMPos!= -1)
 {
  return (parseFloat(A[0]) + 12) + '.' + A[1];
 }

 return MsTimeVal;
}

【问题讨论】:

  • 您的 IF 语句确实考虑/使用 Tim1Val。 并且现在它正在比较字符串,所以结果是正确的。
  • 变量的初始化方式是什么?
  • var MsTim1Val = fn_ConvTo24Format(MsTim1); var MsTim2Val = fn_ConvTo24Format(MsTim2); var MsTim3Val = fn_ConvTo24Format(MsTim3 ); var MsTim4Val = fn_ConvTo24Format(MsTim4 );
  • 是什么使 fn_ConvTo24Format ?我不明白使用了哪些数据类型。

标签: javascript validation


【解决方案1】:

也许从来没有使用过 Tim1Val 是问题的一部分?

【讨论】:

    【解决方案2】:

    我想这些值是以字符串的形式出现的。如果您比较两者,Javascript 会将它们转换为数字,从而有效地改变它们的值。

    "8:00" 变为 8 并忽略分钟。

    也许将您的小时和分钟转换为分钟:

    function toMinutes (value) {
        var parts = value.split(":");
        return Number(value[0]) * 60 + Number(value[1]);
    }
    
    var Tim1Val = "8:00";
    var Tim2Val = "23:00";
    var Tim3Val = "2:00";
    var Tim4Val = "5:00";
    
    
    
    if (toMinutes(Tim1Val) > toMinutes(Tim3Val) && toMinutes(Tim2Val) < toMinutes(Tim4Val))
    

    哦,正如彼得威尔金森所说,你永远不会使用 Tim1Val。

    【讨论】:

    • var Tim1Val = "8:00"; var Tim2Val = "23:00"; var Tim3Val = "2:00"; var Tim4Val = "5:00"; Time3Val 是第二天早上 2 点,time4val 是第二天早上 5 点
    • 如果您知道 Tim3Val 和 Tim4Val 是第二天,只需将 24 小时添加到它们。如果您事先无法真正知道,请考虑使用 Date 对象以获得更大的灵活性。
    【解决方案3】:

    您的函数返回多种类型的数据:字符串和数字。 使用一种类型制作

    ...
    if(locAMPos!= -1)
    {
       return parseFloat(A[0] + '.' + A[1]);
    }
    ....
    

    我认为这不是进行时间比较的好方法。 会更好地获取 Date 类示例并使用它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2015-07-18
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      相关资源
      最近更新 更多