- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
引用这个问题的公认答案How do I get the number of days between two dates in JavaScript? .我看到,在函数 parseDate
中:
function parseDate(str) {
var mdy = str.split('/')
return new Date(mdy[2], mdy[0]-1, mdy[1]);
}
他是这样做的:
var mdy = str.split('/')
return new Date(mdy[2], mdy[0]-1, mdy[1]);
即将传递的日期拆分为月、日和年,然后将其传递给 Date
,例如 new Date(year, month, day)
而他可以简单地执行 new Date(str)
并且它会返回相同的结果(不是吗?)。任何人都可以解释这两种方式之间的区别吗?
更新:测试结果:
var str = '1/1/2000'
var mdy = str.split('/')
console.log( new Date(str) ) // Sat Jan 01 2000 00:00:00 GMT+0500 (Pakistan Standard Time)
console.log( new Date(mdy[2], mdy[0]-1, mdy[1]) ); // Sat Jan 01 2000 00:00:00 GMT+0500 (Pakistan Standard Time)
最佳答案
不,它们不一样(即使假设您将在一个月后减去:他在做 mdy[0] - 1
)因为 new Date(str)
需要(按标准,请参阅 §15.9.4.2)仅接受特定格式的日期 ISO 8601( YYYY-MM-DDTHH:mm:ss.sssZ
,另请参阅 this post ,我不会在这里重复):
If the String does not conform to that format [ISO 8601] the function may fall back to any implementation-specific heuristics or implementation-specific date formats.
请注意(如 Royi 在 comments 中指出的那样)还应支持 RFC 2822 (根据 MDN ),但在 JavaScript specifications 中未提及并且 Internet Explorer 不正式支持它(参见 MSDN ,它可以解析一些相似但不相同的东西)。
在该代码中,他们使用特定的语言环境规则进行解析( MM/DD/YYYY
,我想是 en-US
语言环境,但它不仅仅是一个)。老实说,我什至不会使用该代码进行解析(因为是的,实际上它会因不同的语言环境而被破坏:即使用于拆分的分隔符也不是“语言环境安全的”)。让我用一个例子来解释:
<input type="date"/>
,如果支持),您将根据您的语言环境输入日期。例如在意大利(但通常在欧洲)我们写 DD/MM/YYYY
.21 December 2014
(格式为 21/12/2014
根据他的语言环境)。1/2/2014
,代码将“认为”它是 2nd Jan
,但用户选择了 1st Feb
)。你想让它更复杂吗?连new Date(str)
可能会失败,因为它依赖于浏览器(而且您不能真正相信启发式是可移植和安全的)。如果您问自己“那他们为什么使用这样的代码?”我想说他们使用了一种快速解决方法来支持使用 en-US 区域设置的日期(可能是因为他们使用的浏览器不支持它们的启发式猜测),但这不是您应该重用的东西。 p>
解决方案?永远不要手动解析日期(除非你真的很清楚自己在做什么),为此使用一个好的库(例如 moment.js ),因为你可能对日期格式所做的大多数假设是......错了。
关于Javascript: `new Date(dateString)` 与 `new Date(year, month, day)` 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25865051/
我有一些代码试图解析日期字符串。 当我执行 alert(Date("2010-08-17 12:09:36"));它正确地解析了日期并且一切正常,但我无法调用与 Date 关联的方法,例如 getMo
我有一个问题,我的日期字符串格式为“2011-09-28T10:33:53.694+0000”。我想在 MM/DD/YYYY 中更改此日期格式,不知道如何?请建议我获得正确的结果。 最佳答案 是这样的
在 Matlab 中,当我运行“datenum”时,函数如下; datenum(1970, 1, 1); 我得到以下输出: 719529 我正在尝试找到会给我相同输出的等效函数或脚本。但是,不幸的是,
我搜索了其他问题,但找不到任何其他与此类似的问题。 我正在学习使用 typescript 中的接口(interface)和类。我正在使用 toDateString 方法,并且就日期字符串格式而言,我获
我的提取请求如下: if (_fetchedResultsController!=nil) { return _fetchedResultsController; } NSFetchReque
所以我有一个看起来像的日期字符串 2014-08-02T19:00:00 应该出现在2014 年 8 月 2 日晚上 7 点(美国东部时间),但是当我创建日期对象时,它似乎将其更改为 Sat Aug
这个问题在这里已经有了答案: Converting String to NSDate Giving Wrong Date (2 个答案) stringFromDate returning the w
这个问题在这里已经有了答案: Why does Date.parse give incorrect results? (11 个答案) 关闭 2 年前。 tl;dr - 当我尝试使用 YYYY-MM
有人可以解释为什么格式化相同的 dateString 会得到不同的日期吗? > new Date("04/08/1984") new Date("1984-04-08") <· Sat Apr 07
我正在使用日期格式为“yyyy-mm-dd”的 Javascript Date(string) 构造函数。构造函数在 IE 9 和 Firefox 中工作得很好,除非应用程序在我们运行 IIS 的测试
这个问题在这里已经有了答案: Why does Date.parse give incorrect results? (11 个答案) 关闭 5 年前。 知道我的时区是 GMT+2,请考虑以下代码:
目前,我正在使用 JavaScript Rest API 对 SharePoint 进行休息调用。我收到的修改日期采用以下格式 "2016-08-27T17:40:09Z",从我读到的内容来看,这是许
我的日期字符串为 1/1/1970 8:00 AM 正确的毫秒数应为8 小时 * 每小时 60 分钟 * 每分钟 60000 毫秒 = 28800000 但是,使用 Date.parse(dateSt
如果我输入 DateString[{2011, 2, 29, 0, 0, 0}, {"DayName"}] 它给 "Tuesday" . 并且, DateString[{2011, 2, 29, 0,
我的文件中有一个数字格式,Matlab 将其转换为日期字符串。该格式是结构化的,例如 732161.8561226851。 当我在 Matlab 中执行 datestr(732161.85612268
我正在尝试按日期对一组自定义对象进行排序,但日期作为字符串存储在 .medium dateStyle 中。但是,某些对象的日期也为空字符串。 如何仍然对空日期的数组进行排序? 这是我的代码: let
该页面在 Chrome 中工作正常,但我在 Firefox 中有一个小错误,在 IE 中有一个不同的问题。非常感谢您就这些问题中的任何一个提供帮助。由于我被 Firefox 错误困扰的时间最长,所以我
我试图从 NSUserDefaults 格式化一个字符串,它包含一个日期。结果是(空)。我的问题是:有没有办法将这个字符串转换成日期来格式化它,或者有更好的方法吗? 我的代码: NSString *c
我正在开发 ASP .net MVC 应用程序。 我有一个 System.DateTime? 属性 creationDate,它的值是从 Controller 代码中分配的。在我的 javascrip
我正在尝试从此字符串(来自服务器)创建日期或日期时间: Wed Oct 01 00:00:00 CEST 2014 我尝试了以下方法,但没有成功: DateFormat dateParser = ne
我是一名优秀的程序员,十分优秀!