JavaScript日期加上一些日期问题
javascript date plus some days issue
我正在开发一个报告系统。在我的报告系统中,我将自动加上所选日期的日期。我使用了以下Javascript代码片段。
function add_date(curdate, days) {
//curdate format : "yyyy-mm-dd"
var newdate = new Date(curdate);
newdate.setDate(newdate.getDate() + days);
var dd = newdate.getDate();
var mm = newdate.getMonth() + 1;
var y = newdate.getFullYear();
if(dd < 10)
dd = '0' + dd;
if(mm < 10)
mm = '0' + mm;
var someFormattedDate = y + '-' + mm + '-' + dd;
return someFormattedDate;
}
此功能几乎可以在平台和浏览器上运行。但是在iPhone Safari和Windows 8.1等特定平台或浏览器上,我得到了不同的结果。如果我加 3 天,我可以得到加 2 天的结果。我在电脑、iPhone 和 browserstack.com 上进行了测试。我想要你的帮助。谢谢。
我想说你最好的选择是研究Moment.js
但是你可以尝试这样的东西...
// add 5 days
console.log(add_date('2016-02-18T15:53:02Z', 5));
function add_date(curdate, days) {
var newdate = new Date(curdate);
// add number of days
return new Date(newdate.getTime() + ((24 * 60 * 60 * 1000) * days));
}
日期问题可能是因为时区解释。
日期字符串"yyyy-mm-dd"应该表示午夜 UTC,但某些浏览器可能不遵守此约定。
若要解决此问题,可以通过将固定时间附加到日期字符串来执行快速修复。
添加这个:
curdate += 'T12:00:00Z';
肯定会将时间设置为UTC中午。
jsfiddle 在这里
正如在其他答案中指出的,ECMAScript 2015 要求将 y-m-d 格式解析为 UTC,但是曾经有一段时间 ECMCAScript 2015 被解释为将其视为本地(根据 ISO 8601 和没有时区的长格式日期和时间字符串),但是这种解释被颠倒了(请注意,没有时区的 ISO 8601 格式日期和时间被视为本地)。
此外,并非所有使用的浏览器都能正确解析 ISO 格式,有些浏览器根本不解析它们。
如果您在格林威治以西,那么new Date('2016-02-20')
将为当地的 2 月 19 日而不是 20 日创建日期,这可能会令人困惑。
没有说你是否希望它是本地的,但既然这是为了报告,也许它应该是。您可以使用库进行解析,但只需要几行代码:
/* Parse and validate a date in format yyyy-mm-dd
** Note that a date without a timezone is treated as LOCAL, per ISO 8601
** @param {string} s - date in format y-m-d
** @returns {Date} time vlaue is NaN if date is invalid
*/
function parseISODateLocal(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);
}
要将日期格式设置为 y-mm-dd,可以使用:
/* Return an ISO 8601 string without timezone
** @param {Date} d - date to create string for
** @returns {string} string formatted as ISO 8601 without timezone
*/
function toISODateLocal(d) {
function z(n){return (n<10?'0':'') + n}
return d.getFullYear() + '-' + z(d.getMonth()+1) + '-' + z(d.getDate());
}
- 高位/高位股票无效日期问题
- 浏览器之间的Javascript日期问题
- 使用setMonth时出现Javascript日期问题
- Parse.com 日期问题使用javascript
- JavaScript 日期问题 - 0 变成 1
- 时区的JavaScript日期问题
- JavaScript日期加上一些日期问题
- JavaScript和php中的日期问题很奇怪
- JavaScript 中的日期问题
- JS:使用引导日期选择器在视图模式“月”中出现结束日期问题
- java脚本日期对象中的UK日期问题
- JavaScript日期问题应显示无效日期的错误
- 跨日期选取器默认日期问题
- Angular JS UI启动日期选择器:最大日期和初始日期问题
- 完整日历日单击并删除了时区更改的事件日期问题
- 应用程序脚本日期问题
- 多个浏览器中JS中的日期问题
- Firefox中的日期问题
- 安卓模拟器的javascript日期问题
- javascript的奇怪日期问题