如何使用 javascript 和时间戳验证时间戳以接受多种格式,例如 YYYY-MM-DD HH:mm:ss.S、YYYY-MM-DD HH:mm:ss AM/PM。
7 回答
您可以验证字符串是否是有效的时间戳,如下所示:
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
多年后重新审视这个答案,验证日期仍然具有挑战性。然而,一些争论是内置解析器接受许多输入格式,其中许多没有什么相关性。
这里的问题是验证多种格式的时间戳,除非日期解析器可以帮助您,否则需要将时间戳转换为可比较的通用格式。如何转换成这种格式取决于输入的格式,如果输入不兼容,则必须开发定制的转换算法。
如上所述,要么使用内置的日期解析器,否则,您将不得不手动解析输入,并相应地验证它。
@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);
}
例如:
isValidTimestamp('12/25/1965') // true
每个有效数字都是一个时间戳。如果它满足有效整数的条件,那么它也将满足有效时间戳的条件。
时间戳 = 自 1970/01/01 以来的毫秒数
var d = Date.parse(your_timestamp);
d
应该是一个有效的数字,而不是 NaN。
如果事先不知道格式是什么,或者至少不知道它是有限数量的格式之一,您就不能一般地解析日期字符串。
如果日期组件始终采用 ISO8601 格式 (yyyy-mm-dd) 并且时间是 24 小时或 12 小时(上午或下午),您应该能够轻松拆分时间,查找上午或下午,然后处理时间12 小时或 24 小时取决于它是否存在。
时区必须指定为 UTC (Z) 或小时 +/-UTC,诸如 EST 之类的缩写是不明确的(并且不是标准化的)。
通过使用 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());
/**
* 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;