我正在制作一个工作日计算器,它接受日期和偏移量并返回日期。因此,如果您传递的是 2017 年 2 月 27 日星期一,并且想知道返回 2017 年 2 月 23 日星期四之前 2 个工作日的日期。它还考虑了节假日,因此如果在前面的示例中,2017 年 2 月 23 日是假期将于 2017 年 2 月 22 日返回。
我在 SQL Server 中的日期字段中有一个假期列表,格式为 yyyy-mm-dd
。问题是,当它们转换为 javascript Date
对象时,它会附加时区偏移量,并且在东部标准时间的情况下,会从日期中减去 5 小时,将其回滚到前一天。
新日期('2017-02-20');
变成了
2017 年 2 月 19 日星期日 19:00:00 GMT-0500(东部标准时间)
或
2017 年 2 月 19 日星期日 20:00:00 GMT-0400(东部夏令时间)
它似乎在标准时间和夏令时间之间随机来回翻转。
无论用户住在哪里,如何防止 javascript 弄乱我的日期?我只关心日期,而不关心时间。
最佳答案
不建议使用 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
关于javascript - 如何阻止 javascript 更改我的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42374182/