【问题标题】:How to validate timestamp in javascript如何在javascript中验证时间戳
【发布时间】:2012-09-07 12:34:50
【问题描述】:

如何使用 javascript 和时间戳验证时间戳以接受多种格式 例如YYYY-MM-DD HH:mm:ss.S, YYYY-MM-DD HH:mm:ss AM/PM。

【问题讨论】:

标签: javascript validation timestamp


【解决方案1】:

你可以像这样验证一个字符串是否是一个有效的时间戳:

var valid = (new Date(timestamp)).getTime() > 0;

var valid = (new Date('2012-08-09')).getTime() > 0; // true
var valid = (new Date('abc')).getTime() > 0; // false

多年后重新审视这个答案,验证日期仍然具有挑战性。然而,一些争论是内置解析器接受许多输入格式,其中许多没有什么相关性。

这里的问题是验证多种格式的时间戳,除非日期解析器可以帮助您,否则需要将时间戳转换为可比较的通用格式。如何转换成这种格式取决于输入的格式,如果输入不兼容,则必须开发量身定制的转换算法。

如上所述,要么使用内置的日期解析器,否则,您将不得不手动解析输入,并相应地对其进行验证。

【讨论】:

  • +1 “有效”,就像 Date 构造函数可以使用 Date.parse 解析的内容一样。这在浏览器之间不一定一致。
  • 谢谢,不过如果输入格式不符合解析器,还是得提前转换一下。
  • 警告:这将返回 true 并带有一个日期字符串“4”,这在技术上是一个有效的时间戳,但在您的应用程序的上下文中可能不是一个有效的日期。
  • var 有效 = Date.parse(timestamp) > 0;将给出相同的结果
  • 在 if 语句中使用它时,我相信您甚至可以删除 > 0 并只使用 if ((new Date(timestamp)).getTime()) { console.log("这是一个日期! "); }
【解决方案2】:

每个有效数字都是一个时间戳。如果满足整数有效的条件,那么它也将满足有效时间戳的条件。

时间戳 = 自 1970/01/01 以来的毫秒数

【讨论】:

    【解决方案3】:

    @Jørgen 的解决方案很好,但如果您的日期早于January 1, 1970,您的时间戳将是一个负数,但也是一个有效 时间戳。

    function isValidTimestamp(_timestamp) {
        const newTimestamp = new Date(_timestamp).getTime();
        return isNumeric(newTimestamp);
    }
    
    function isNumeric(n) {
        return !isNaN(parseFloat(n)) && isFinite(n);
    }
    

    我从following SO answer.获取的数字验证

    例如:

    isValidTimestamp('12/25/1965') // true
    

    【讨论】:

      【解决方案4】:
      var d = Date.parse(your_timestamp);
      

      d 应该是一个有效数字,而不是 NaN。

      参考:http://www.w3schools.com/jsref/jsref_parse.asp

      【讨论】:

      • -1 W3Schoola 很糟糕,Date.parse 依赖于实现,因此非常不可靠。日期字符串应手动解析。
      • 你能告诉我为什么 w3schools 很糟糕吗?你能告诉我一个为什么 Date.parse 不可靠的案例
      • w3fools 有一些提示。 Date.parse 完全依赖于 ECMA-262 ed 3 的实现,在 ES5 浏览器中应该支持修改后的 ISO8601 长格式(但有些不支持)。 Date.parse('2012-02-01') 在 IE Date.parse('2012/02/01') 在大多数版本的 Firefox 中没有但失败。有些不会解析“01-02-2012”但会解析“01/02/2012”,无论系统设置如何,都将它们视为特殊的美国日期格式。我已经放弃了跟踪,只是手动解析日期。
      【解决方案5】:

      如果事先不知道格式是什么,或者至少不知道它是有限数量的格式之一,您就不能一般地解析日期字符串。

      如果日期部分始终采用 ISO8601 格式 (yyyy-mm-dd) 并且时间是上午或下午的 24 小时或 12 小时,您应该能够轻松拆分时间,查找上午或下午,然后根据是否存在,将时间视为 12 小时或 24 小时。

      时区必须指定为 UTC (Z) 或小时 +/-UTC,诸如 EST 之类的缩写是不明确的(并且不是标准化的)。

      【讨论】:

        【解决方案6】:

        通过使用new Date().getTime(); 你可以做到这一点

        做这样的事情

        var getDate="12-12-2012";
        var myDate=getDate.split("-");
        var getDate=myDate[1]+"/"+myDate[0]+"/"+myDate[2];
        alert(new Date(getDate).getTime());
        

        【讨论】:

          【解决方案7】:
          /**
           * Determine whether string is timestamp
           *
           * @example
           *
           * isTimestamp('1606205966448'); // true
           * isTimestamp(1606205966448); // true
           * isTimestamp('1606205966448qwe'); // false
           * isTimestamp('2020-11-24T08:19:26.448Z'); // false
           *
           * @param {string|number} n
           * @returns {boolean}
           */
          function isTimestamp(n) {
            const parsed = parseFloat(n);
          
            return !Number.isNaN(parsed) && Number.isFinite(parsed) && /^\d+\.?\d+$/.test(n);
          }
          
          export default isTimestamp;
          

          【讨论】:

            猜你喜欢
            • 2011-08-19
            • 2016-08-05
            • 2015-11-04
            • 1970-01-01
            • 2011-10-07
            • 1970-01-01
            • 2022-01-08
            • 2021-12-01
            • 2016-05-29
            相关资源
            最近更新 更多