Javascript 检查我是否接收到有效的unix时间戳

Javascript 检查我是否接收到有效的unix时间戳,javascript,datetime,Javascript,Datetime,Iam正在创建一个时间戳api,用于从客户端获取日期字符串。资源是GET/api/timestamp/:date\u string,日期字符串是日期字符串[yyyy-mm-dd]或unix时间戳(以秒为单位)[2764800000]。我需要一种方法来检查传递的字符串是否是有效的unix时间戳 下面是验证提供的日期字符串的函数 函数createDate(日期字符串){ 常量regexp=/^\d{4}[\/\-](0?[1-9]| 1[012])[\/\-](0?[1-9]|[12][0-9]|

Iam正在创建一个时间戳api,用于从客户端获取日期字符串。资源是
GET/api/timestamp/:date\u string
,日期字符串是日期字符串[yyyy-mm-dd]或unix时间戳(以秒为单位)[2764800000]。我需要一种方法来检查传递的字符串是否是有效的unix时间戳

下面是验证提供的日期字符串的函数

函数createDate(日期字符串){
常量regexp=/^\d{4}[\/\-](0?[1-9]| 1[012])[\/\-](0?[1-9]|[12][0-9]| 3[01])$;
常量regexp2=/^(\d{13})?$/;
让我们约会;
开关(日期字符串的类型){
大小写“字符串”:
if(regexp2.test(日期字符串)){
日期=新日期(数字(日期字符串));
}
if(regexp.test(日期字符串)){
日期=新日期(日期字符串);
}否则{
返回console.log(“无效的日期字符串”);
}
打破
案例“未定义”:
日期=新日期();
违约:
返回console.log(“未知日期字符串”);
}
返回日期;
}
我推荐JS中所有与日期相关的内容

特别是这种方法很有趣

console.log(“12-12-1212”,力矩(“12-12-1212”,“YYYY-MM-DD',true”).format(),力矩(“12-12-1212”,“YYYY-MM-DD',true”).isValid()
console.log(“1212-12-12”,力矩(“1212-12-12”,“YYYY-MM-DD',true”).format(),力矩(“1212-12-12”,“YYYY-MM-DD',true”).isValid()
console.log(“1212-12-1212”,矩(“1212-12-1212”,YYYY-MM-DD',true)。format(),矩(“1212-12-1212”,“YYYY-MM-DD',true)。isValid())
console.log('1318874398',moment('1318874398',X',true).format(),moment('1318874398',X',true).isValid())

有许多问题和答案

“UNIX时间戳”通常被视为自UNIX纪元1970-01-01T00:00:00Z以来的秒数。Javascript具有相同的历元,因此要转换为ECMAScript时间值,只需乘以1000:

let ecmascriptTimeValue = unixTimestamp * 1000;
可以向日期构造函数传递时间值以创建日期:

let ecmascritpDate = new Date(unixTimestamp * 1000);
ECMAScript时间值可以是-8.64e15到+8.64e15之间的任意数字(毫秒,约为±285426年),因此以秒为单位的UNIX时间戳范围的简单测试如下:


让isValid=(value>=-8.64e12&&value为什么
date\u string
的类型在这里不是string?GET参数始终是string。因此,除非在将值传递到该函数之前修改了该值的类型,否则不要期望该类型是string以外的任何类型。另外,您对它的定义是什么“有效的unix时间戳”?从技术上讲,任何整数值都是有效的unix时间戳。您似乎在这里应用了13位数字的任意限制。这在一般情况下没有什么意义,如果您给出的示例值只有10位数字,则更没有意义。我真的不明白“unix时间戳”是什么。我认为它是常量,即13位数字,但在对各种日期进行实验后,我发现它只是一个任意长度的整数。@cAny数字值从-8.64e12到+8.64e12是一个有效的UNIX时间戳,就ECMAScript日期对象而言,以秒为单位,请参见。因此2764800000是基于该标准的有效时间戳(2057年8月12日),但是您可能有其他条件,例如有效的日期范围。非常感谢:尽管
date=新日期(数字(日期字符串*1e3));//不需要毫秒
因为我调用日期时,它会导致一个有趣的年份
Sat,09 Jan 52647 09:19:08 GMT
。ToutString请参见
表示自1970年1月1日00:00:00 UTC以来毫秒数的整数值
时刻(“12-12-1212”)。isValid()
本身不是测试日期是否有效的有效方法。它依赖于内置解析器,因此在不同的实现中可能会有不同的结果,Safari至少将其视为无效,但其他人可能会将其视为有效。您应该始终传递解析格式,并严格包括if验证:
时刻(“12-12-1212”,YYYY-MM-DD',true)。isValid()
返回false。