如何阻止javascript更改日期?

时间:2017-02-21 17:36:23

标签: javascript date

我正在制作一个工作日计算器,它带有日期和偏移量并返回日期。因此,如果您在2017年2月27日星期一通过它,并想知道2017年2月23日星期四返回前2个工作日的日期。它还考虑到假期,所以如果在上一个例子中,2017年2月23日是一个假期它将于2017年2月22日返回。

我在日期字段中以yyyy-mm-dd格式列出了SQL Server中的假期列表。问题在于,当它们转换为javascript Date对象时,它会附加时区偏移量,如果东部标准时间从日期开始减去5个小时,则将其回滚到前一天。

new Date('2017-02-20');

变为

Sun Feb 19 2017 19:00:00 GMT-0500 (Eastern Standard Time)

Sun Feb 19 2017 20:00:00 GMT-0400 (Eastern Daylight Time)

它似乎随机地在标准时间和白天之间来回翻转。

无论用户住在哪里,如何防止javascript搞乱我的日期?我只关心约会,而不关心时间。

1 个答案:

答案 0 :(得分:1)

不建议使用Date构造函数(或Date.parse)解析字符串,因为它在很大程度上取决于实现。在最近的浏览器中,ISO 8601格式日期被解析为UTC,因此它们被主机时区偏移量偏移。较旧的浏览器根本不会解析ISO 8601格式的日期,有些会将它们解析为本地日期。

解析日期需要2行功能,验证还需要一个:

/* Parse an ISO 8601 format date string as local
** @param {string} s - date informat yyyy-mm-dd
** @returns {Date}
*/
function parseLocal(s) {
  var b = s.split(/\D/);
  var d = new Date(b[0], --b[1], b[2]);
  return d && d.getMonth() == b[1]? d : new Date(NaN);
}

console.log(parseLocal('2017-02-25').toString()); // 25 Feb 2017
console.log(parseLocal('2017-02-30').toString()); // Invalid date