如何在 JS 中正确解析日期

How to parse Date properly in JS?

本文关键字:日期 JS      更新时间:2023-09-26

我试图通过在 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);
}