【发布时间】: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
如何使用 javascript 和时间戳验证时间戳以接受多种格式 例如YYYY-MM-DD HH:mm:ss.S, YYYY-MM-DD HH:mm:ss AM/PM。
【问题讨论】:
标签: javascript validation timestamp
你可以像这样验证一个字符串是否是一个有效的时间戳:
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 解析的内容一样。这在浏览器之间不一定一致。
每个有效数字都是一个时间戳。如果满足整数有效的条件,那么它也将满足有效时间戳的条件。
时间戳 = 自 1970/01/01 以来的毫秒数
【讨论】:
@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
【讨论】:
var d = Date.parse(your_timestamp);
d 应该是一个有效数字,而不是 NaN。
【讨论】:
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”,无论系统设置如何,都将它们视为特殊的美国日期格式。我已经放弃了跟踪,只是手动解析日期。
如果事先不知道格式是什么,或者至少不知道它是有限数量的格式之一,您就不能一般地解析日期字符串。
如果日期部分始终采用 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;
【讨论】: