如何使用Javascript验证时间戳并接受多种格式,例如YYYY-MM-DD HH:mm:ss.S,YYYY-MM-DD HH:mm:ss AM / PM。
如何使用Javascript验证时间戳并接受多种格式,例如YYYY-MM-DD HH:mm:ss.S,YYYY-MM-DD HH:mm:ss AM / PM。
你可以像这样验证一个字符串是否是有效的时间戳:
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
经过多年后重新审视这个答案,验证日期仍然具有挑战性。 然而,一些观点认为内置解析器接受了许多输入格式,其中很多与此问题关系不大。
这里的问题是验证多种格式的时间戳,如果日期解析器无法帮助您,则需要将时间戳转换为可比较的通用格式。 如何转换取决于输入的格式,在不兼容的情况下,需要开发量身定制的转换算法。
要么使用内置的日期解析器,如上所述,否则,您将不得不手动解析输入并相应地进行验证。
Date.parse
中,“valid”指的是Date constructor
可以解析的日期格式。这个解析结果在不同的浏览器上可能会有所不同。 - David Hellsing@Jørgen的解决方案不错,但如果你有一个在1970年1月1日
之前的日期,你的时间戳将是一个负数,但也是一个有效的时间戳。
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。
Date.parse
完全依赖于实现,在 ES5 浏览器中应支持修改后的 ISO8601 长格式(但有些浏览器不支持)。Date.parse('2012-02-01')
在 IE < 9 和 Safari 中失败,Date.parse('2012/02/01')
则没有问题,但在大多数版本的 Firefox 中失败。有些浏览器无法解析 '01-02-2012',但可以解析 '01/02/2012',所有浏览器都将它们视为奇特的美国日期格式,而不考虑系统设置。我已经放弃跟踪并手动解析日期。 - RobG如果不事先知道日期字符串的格式,或者至少知道它是有限数量格式之一,就无法通用地解析日期字符串。
如果日期组件始终以ISO8601格式(yyyy-mm-dd)表示,时间为24小时制或12小时制带有AM或PM,则应该能够轻松分离出时间,查找AM或PM,然后根据是否存在来处理时间为12或24小时制。
时区必须指定为UTC(Z)或小时+/- UTC,缩写如EST具有歧义性(且未标准化)。
/**
* 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;
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());
警告! Jørgen的答案在1970年之前不起作用。
getTime
将在不是有效日期时返回NaN
(不是数字),因此我们将使用内置函数isNaN
进行检查,并使用!
反转该值。
!isNaN(new Date("1969-02-13").getTime())
处理日期可能会很麻烦。建议使用经过实战检验的库,例如date-fns
或类似的库。