【问题标题】:JavaScript indexOf() function fails in VB.NetJavaScript indexOf() 函数在 VB.Net 中失败
【发布时间】:2015-08-10 06:11:28
【问题描述】:

这段代码在大多数(所有?)浏览器中都能正常运行:

    myDate = new Date();
    alert(myDate.toString().indexOf("("));

但是,当在 VB.Net WebBrowser 控件中执行时,它会返回 -1

这是为什么呢?

【问题讨论】:

  • 代码的意义何在??
  • “它返回 -1” 因为在 "(" 的结果中找不到 "("
  • 就是去掉时区,用括号()表示。
  • @iSofia:在你之前见过的实现上,也许吧,但这并不是它所要求的。格式几乎完全未指定。
  • 感谢大家的帮助。事实证明,VB.Net 的网络浏览器显示没有时区的日期,因此没有括号,因此 indexOf() 返回 -1

标签: javascript vb.net date webbrowser-control indexof


【解决方案1】:

这是为什么呢?

DatetoString 不需要输出包含任何( 的字符串。如果字符串中没有(indexOf 将返回-1。

来自the specification

  1. 让 O 成为这个 Date 对象。
  2. 如果 O 没有 [[DateValue]] 内部槽,则
    • 让 tv 为 NaN。
  3. 否则,
    • 让 tv 成为这个时间值。
  4. 返回 ToDateString(tv)。

...ToDateString 说:

  1. 断言:类型(tv) 是数字。
  2. 如果 tv 为 NaN,则返回“无效日期”。
  3. 返回一个依赖于实现的字符串值,它使用一种方便的、人类可读的形式将 tv 表示为当前时区中的日期和时间。

因此可以不使用时区指示符,或使用 Z 来指示 GMT,或者不使用 (...) 的时区指示符,例如 GMT+04:00-05:00 或类似的,等等。

【讨论】:

  • 是的,好像不用toString()函数也能显示日期字符串。但日期与时区一起显示:Mon Aug 10 2015 14:21:55 GMT+0800 (Malay Peninsula Standard Time)。如果不使用 toString() 函数,我将无法使用 indexOf() 函数来确定第一个括号的位置。
  • @iSofia:我不知道那句话中的“显示”是什么意思。 alert(new Date()) 将使用 toString。如果toString 返回一个带括号的字符串,indexOf('(') 不会返回-1。所以很明显不是。您将不得不修改您的代码,使其不假定为(,因为规范明确表示不需要。
  • 谢谢你,T.J.克劳德。匆忙中,我没有为尽职调查而烦恼。出于某种原因,浏览器倾向于显示带有时区的日期,但 VB.Net 的 Web 浏览器控件不显示 - 因此是 -1 结果。好奇怪。
猜你喜欢
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多