我正在制作一个工作日计算器,它带有日期和偏移量并返回日期。因此,如果您在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搞乱我的日期?我只关心约会,而不关心时间。
答案 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