【问题标题】:Convert querstring parameter to javascript date object fails - NaN将 querstring 参数转换为 javascript 日期对象失败 - NaN
【发布时间】:2009-11-11 04:46:34
【问题描述】:

我正在尝试将查询字符串值转换为 Javascript 日期对象,然后将其转换为 ISO 日期格式。

我有三个按钮 - 一个提取查询字符串并显示值 - 正常工作 其次,使用第一个函数提取查询字符串(有效),然后转换为日期 - 失败 - 获取 NaN 第三,将硬编码字符串直接传递给第二个函数 - 有效。

代码如下所示。如何获取要转换为 Javascript 日期的 querstring 值

<head>
<SCRIPT LANGUAGE="JavaScript" SRC="./date.format.js">
</SCRIPT>
</head>
<script>
function DateTest(dt)
{
var myDate = new Date(dt);
alert(myDate);
var newDate = myDate.format("isoDateTime");
document.write(newDate);
alert(newDate);
}

function QueryDateTest(parm)
{
 DateTest(getRequestParameter(parm));
}
function getRequestParameter( name ) {
var strReturn = "";
  var strHref = window.location.href;
  if ( strHref.indexOf("?") > -1 ){
    var strQueryString = strHref.substr(strHref.indexOf("?")).toLowerCase();
    var aQueryString = strQueryString.split("&");
    for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
      if (aQueryString[iParam].indexOf(name.toLowerCase() + "=") > -1 ){
        var aParam = aQueryString[iParam].split("=");
        strReturn = aParam[1];
        break;
      }
    }
  }
  alert(unescape(strReturn));
  return(unescape(strReturn.toString()));
}
</script>
<body>
<input type="button" id="hello-world1" value="QueryString" onClick="getRequestParameter('create');" />
<input type="button" id="hello-world2" value="ISODate" onClick="QueryDateTest('create');" />
<input type="button" id="hello-world3" value="HardCoded" onClick="DateTest('11/10/2009');" />

【问题讨论】:

  • 您的 Date 类以“isoDateTime”为参数的格式函数是什么?
  • 查询字符串的外观如何?据我所知,yyyy/mm/dd [hh:mm:ss:ms] 格式最适合创建与区域设置无关的日期(new Date('yyyy/mm/dd'))。
  • dategormat.js 文件来自stevenlevithan.com/assets/misc/date.format.js。我的查询字符串是 ?create='11/11/2009'

标签: javascript date query-string iso8601


【解决方案1】:

在 Firefox 3.5 和 IE 7 中对我来说效果很好。我能想到的两件事,在您的查询字符串中,您可能不小心输入了错误的日期。就像 ll/10/2009 一样(就像我在 llama 中一样)。然后日期将无法正确解析。其次,我们必须查看 date.format.js 并查看它对 Date 对象的作用。

【讨论】:

【解决方案2】:

我有你的解决方案。问题出在您的查询字符串中,您的日期周围有引号,并且您的查询字符串解析器还将这些引号放在日期字符串中。 javascript Date 方法对传入的内容非常讲究,引号会使其返回 NAN。所以这是你的简单修复。在您的代码中,只需确保从日期字符串中删除引号即可:

...
    alert(unescape(strReturn).replace(/'/gi,""));
    return(unescape(strReturn.toString()).replace(/'/gi,""));
}
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 2015-03-13
    • 2012-12-01
    相关资源
    最近更新 更多