如何解决检查是否接收到有效的unix时间戳
我创建了一个时间戳API,该API从客户端获取date_strings。资源为GET /api/timestamp/:date_string
,日期字符串为dateString [yyyy-mm-dd]或以秒为单位的Unix时间戳['2764800000']。我需要一种方法来检查所传递的字符串是否为有效的Unix时间戳。
下面是我用于验证提供的date_string的函数
function createDate(date_string) {
const regexp = /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/;
const regexp2 = /^(\d{13})?$/;
let date;
switch (typeof date_string) {
case "string":
if (regexp2.test(date_string)) {
date = new Date(Number(date_string));
}
if (regexp.test(date_string)) {
date = new Date(date_string);
} else {
return console.log("Invalid Date String");
}
break;
case "undefined":
date = new Date();
default:
return console.log("Unknown Date String");
}
return date;
}
每当我使用unix时间戳打api时,它将返回未定义的值,即GET /api/timestamp/2764800000
。我不知道问题出在哪里,RegExpression是吗?我需要帮助
解决方法
对于JS中与之相关的所有日期,我都会推荐Moment.js
特别是isValid()
方法很有趣
console.log("12-12-1212",moment("12-12-1212",'YYYY-MM-DD',true).format(),true).isValid())
console.log("1212-12-12",moment("1212-12-12",true).isValid())
console.log("1212-12-1212",moment("1212-12-1212",true).isValid())
console.log('1318874398',moment('1318874398','X',true).isValid())
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.27.0/moment.min.js"></script>
在您编写的代码的特殊情况下,存在一些问题。
主要问题是,在成功测试break
switch
regexp2
然后Date
构造函数需要参数以毫秒为单位,而不是以秒为单位。
当然,您的regexp2
量词是不正确的。 {13}
表示之前的13次出现。您需要{0,13}
(如果允许毫秒,则需要{0,16}
)[也许/\d{0,13}(\.\d{0,3)?/
]
function createDate(date_string) {
const regexp = /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/;
const regexp2 = /^(\d{0,13})?$/; // {0,13} instead of {13}
let date;
switch (typeof date_string) {
case "string":
if (regexp2.test(date_string)) {
date = new Date(Number(date_string * 1e3)); // Date constructor need milliseconds
break; // You forget this break
}
if (regexp.test(date_string)) {
date = new Date(date_string);
} else {
return console.log("Invalid Date String");
}
break;
case "undefined":
date = new Date();
default:
return console.log("Unknown Date String");
}
return date;
}
console.log(createDate("2020-12-12"))
console.log(createDate("3661"))
,
how to validate a date上有很多问题和答案。
“ UNIX时间戳”通常被认为是自UNIX时代1970-01-01T00:00:00Z以来的秒数。 Javascript具有相同的纪元,因此要转换为ECMAScript时间值,只需乘以1,000:
let ecmascriptTimeValue = unixTimestamp * 1000;
可以向Date构造函数传递时间值以创建日期:
let ecmascritpDate = new Date(unixTimestamp * 1000);
ECMAScript时间值可以是-8.64e15到+ 8.64e15之间的任何数字(以毫秒为单位,大约为±285,426年),因此,以秒为单位的UNIX时间戳范围的简单测试是:
let isValid =(值> = -8.64e12 &&值
此方法会将字符串强制转换为数字,因此"123123" == 123123
。如果还要确保它是数字类型,请添加typeof测试:
let isValid =(typeof值=='数字'&&值> = -8.64e12 &&值
您可能还希望使用最大值和最小值来限制日期范围。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。