javascript - 如何阻止 javascript 更改我的日期?

标签 javascript date

我正在制作一个工作日计算器,它接受日期和偏移量并返回日期。因此,如果您传递的是 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/

相关文章:

javascript - Ionic 3 App - 使用非 ionic html 组件的最佳方式

javascript - Jquery 数组/字符串搜索

mysql - 在 MySQL 中将列中的所有值从 VARCHAR 转换为 DATE

javascript - 一对多 firebase 查询

javascript - 附加 html 按钮,然后调用其 onClick 事件 jquery

date - 该模块导入错误

Java Web 服务和 .net 客户端日期数据类型互操作性问题

java - 如何在 JPA 命名查询上获取 CURDATE()/NOW()?

javascript - 异步函数和 Readline 使用

php - 如何在 PHP 中计算到 future 某个时间点的天数?