如何在 JS 中正确解析日期
本文关键字:日期 JS | 更新日期: 2024-10-26 00:24:56
我试图通过在 JS中使用以下代码检查日期字符串是否为日期类型,
var dateString = "2015";
Date.parse(dateString)
但它始终将解析的字符串作为1420070400000返回。
在 C# 中
如果我使用 DateTime.TryParse 方法检查日期字符串,它会给出错误的结果,因为"2015"不是日期。
DateTime.TryParse("2015", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)
谁能建议我检查日期字符串是否为日期的最佳方法是什么?
也许这可以帮助你,但我不确定。
function isStringValidDate(ds)
{
var d=new Date(ds);
if(d && d.getFullYear()>0)
return true;
else
return false;
}
Date.parse 返回自 1970 年 1 月 1 日 00:00:00 UTC 或 NaN 以来的毫秒数(如果无效)。
要检索有效的日期对象,还必须构造一个新的日期对象
new Date(Date.parse(2015))
当然,如果你想要更多的 c# 风格,你可以扩展字符串或日期原型
String.prototype.TryParseToDate = function() {
var parsedDate = Date.parse(this);
// todo, implement errorhandling
return new Date(parsedDate);
};
"2015".TryParseToDate(); // this returns the parsed date
Date.prototype.TryParse = function(inputString) {
var parsedDate = Date.parse(inputString);
// todo, implement errorhandling
return new Date(parsedDate);
};
var date = new Date();
date.TryParse("2015"); // this returns the parsed date
错误处理示例
String.prototype.TryParseToDate = function() {
var parsedDate = Date.parse(this);
if(isNaN(parsedDate)){
throw "Not a valid date";
}
return new Date(parsedDate);
};
try {
"IWillCrash".TryParseToDate();
}
catch(err) {
console.log(err);
}
更新
正如@orhor所指出的,扩展原型可能被认为是一种反模式,特别是当你正在构建大型系统时。对于小的,我会说nae,不要打扰。如果需要,有几个选项,我通常会构建一个 util 库或将所有内容包装在我自己的类中,后者是我最喜欢的,因为它在项目增长时扩展得很好。
下面是一个日期实用程序包装器的示例。
var myDateUtils = function(){
var that = this;
that.TryParseToDate = function(value) {
var parsedDate = Date.parse(value);
if(isNaN(parsedDate)){
throw "Not a valid date";
}
return new Date(parsedDate);
};
// place other functions here
that.Greet = function(){
console.log("Hello");
}
// return constructed object
return that;
}
// construct object wrapper
var myDate = new myDateUtils();
myDate.Greet();
// Will crash
try {
var result = myDate.TryParseToDate("IWillCrash");
console.log(result);
}
catch(err) {
console.log(err);
}
// Will succeed
try {
var result = myDate.TryParseToDate("2015");
console.log(result);
}
catch(err) {
console.log(err);
}