【问题标题】:Date validation - Date object differs from input日期验证 - 日期对象与输入不同
【发布时间】:2016-03-01 13:07:15
【问题描述】:

我正在编写几年前编写的用于检查日期是否有效的脚本:

//These values are comming from user input
var _day = 19;
var _month = 9; //October (10 - 1 for javascript Date object sake)
var _year = 1986;
var _hour = 0;
var _minute = 0;
var _second = 0;
var result;
    
//Checks if date is valid
var _datetime = new Date(_year, _month, _day, _hour, _minute, _second);
var _valid = 
    	_day == _datetime.getDate() 
    	&& _month == _datetime.getMonth() 
    	&& _year == _datetime.getFullYear() 
    	&& _hour == _datetime.getHours() 
    	&& _minute == _datetime.getMinutes() 
    	&& _second == _datetime.getSeconds();
    	
if(_valid){
  result = 'valid';
}else{
  result = 'invalid';
}

document.write('The date ' + _datetime + ' is ' + result);

此日期显示为无效,因为 _datetime.getHours() 返回的是 1 而不是 0

如果我将 _day 值更改为 1820,则日期会正确验证。我只是看不出有什么问题。

【问题讨论】:

  • 此代码为我显示User input is valid...
  • 对我来说也显示正确
  • 是时区问题吗?
  • 我想是的@brso05。也在这里尝试Date.UTC
  • _datetime.getHours() 正在返回 0

标签: javascript validation date


【解决方案1】:

可能是时区问题,请尝试 UTC。

//These values are comming from user input
var _day = 19;
var _month = 9;
var _year = 1986;
var _hour = 0;
var _minute = 0;
var _second = 0;

//Checks if date is valid
var _datetime = new Date(Date.UTC(_year, _month, _day, _hour, _minute, _second));
var _valid = 
    _day == _datetime.getUTCDate() 
    && _month == _datetime.getUTCMonth() 
    && _year == _datetime.getUTCFullYear() 
    && _hour == _datetime.getUTCHours() 
    && _minute == _datetime.getUTCMinutes() 
    && _second == _datetime.getUTCSeconds();


if(_valid){
    console.log('User input is valid');
}else{
    console.log('Invalid date');
}

【讨论】:

  • 我尝试使用Date.UTC 进行修复,但忘记使用 getUTC... 函数。非常感谢。
  • 这证明不了。 OP 将这些值视为本地值,无法重现原始代码中的错误(我怀疑 OP 没有意识到日期与预期的月份不同)。您所做的只是表明 UTC 方法也有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
  • 2020-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多