27

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

4

7 回答 7

55

您可以验证字符串是否是有效的时间戳,如下所示:

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

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

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

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

于 2012-09-14T10:50:35.820 回答
6

@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);
}

我从以下 SO 答案中获取的数字验证。

例如:

isValidTimestamp('12/25/1965') // true
于 2018-05-23T09:58:52.860 回答
5

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

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

于 2017-04-12T12:29:05.690 回答
3
var d = Date.parse(your_timestamp);

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

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

于 2012-09-14T10:55:10.797 回答
1

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

如果日期组件始终采用 ISO8601 格式 (yyyy-mm-dd) 并且时间是 24 小时或 12 小时(上午或下午),您应该能够轻松拆分时间,查找上午或下午,然后处理时间12 小时或 24 小时取决于它是否存在。

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

于 2012-09-14T11:23:44.140 回答
0

通过使用 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());
于 2012-09-14T11:00:35.397 回答
-1
/**
 * 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;
于 2020-11-24T12:15:49.217 回答