Date(dateString)和new Date(dateString)之间的区别

时间:2010-08-17 18:30:27

标签: javascript date

我有一些代码试图解析日期字符串。

当我alert(Date("2010-08-17 12:09:36"));时 它正确地解析了日期,一切正常但我无法调用与Date相关联的方法,如getMonth()

当我尝试:

var temp = new Date("2010-08-17 12:09:36");
alert(temp);

我收到“无效日期”错误。

有关如何使用新Date()解析“2010-08-17 12:09:36”的任何想法?

10 个答案:

答案 0 :(得分:59)

<强>日期()

通过此操作,您可以调用名为Date()的函数。它不接受任何参数并返回表示当前日期和时间的字符串。

新日期()

这样你就可以创建一个新的Date实例。

您只能使用以下构造函数:

new Date() // current date and time
new Date(milliseconds) //milliseconds since 1970/01/01
new Date(dateString)
new Date(year, month, day, hours, minutes, seconds, milliseconds)

因此,不允许使用2010-08-17 12:09:36作为构造函数的参数。

请参阅w3schools


编辑:new Date(dateString)使用以下格式之一:

  • “1975年10月13日11:13:00”
  • “1975年10月13日11:13”
  • “1975年10月13日”

答案 1 :(得分:36)

以下格式适用于所有浏览器:

new Date("2010/08/17 12:09:36");

因此,要使yyyy-mm-dd hh:mm:ss格式化的日期字符串与浏览器完全兼容,您必须使用斜杠替换短划线:

var dateString = "2010-08-17 12:09:36";
new Date(dateString.replace(/-/g, "/"));

答案 2 :(得分:4)

我知道这已经过时了,但到目前为止,更简单的解决方案就是使用

var temp = new Date("2010-08-17T12:09:36");

答案 3 :(得分:3)

不同之处在于(如果我记得ECMA文档),Date("xx")不会创建(在某种意义上)新的日期对象(实际上它等同于调用(new Date("xx").toString())虽然new Date("xx")实际上会创建一个新的日期对象。

更多信息:

查看http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf

的15.9.2

答案 4 :(得分:2)

  

关于如何解析的任何想法&#34; 2010-08-17 12:09:36&#34;新的日期()?

在ES5之前,浏览器不需要支持字符串格式,尽管有一些广泛支持。然而,浏览器支持是不可靠的,例如不一致,例如,有些人会允许超出限制值而有些人不会,有些人会支持某些格式而有些人不会等等。

ES5引入了对某些ISO 8601格式的支持,但OP不符合ISO 8601标准,并且并非所有使用的浏览器都支持它。

唯一可靠的方法是使用小的解析功能。以下内容解析OP中的格式并验证值。

&#13;
&#13;
/* Parse date string in format yyyy-mm-dd hh:mm:ss
** If string contains out of bounds values, an invalid date is returned
** 
** @param {string} s - string to parse, e.g. "2010-08-17 12:09:36"
**                     treated as "local" date and time
** @returns {Date}   - Date instance created from parsed string
*/
function parseDateString(s) {
  var b = s.split(/\D/);
  var d = new Date(b[0], --b[1], b[2], b[3], b[4], b[5]);
  return d && d.getMonth() == b[1] && d.getHours() == b[3] &&
         d.getMinutes() == b[4]? d : new Date(NaN);
}
  
document.write(
  parseDateString('2010-08-17 12:09:36') + '<br>' +  // Valid values
  parseDateString('2010-08-45 12:09:36')             // Out of bounds date
);
&#13;
&#13;
&#13;

答案 5 :(得分:1)

正确使用日期的方式:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

此外,下面的代码显示了如何使用函数“Animal”的单个定义,它可以是a)直接调用,b)通过将其视为构造函数来实例化

function Animal(){
    this.abc = 1;
    return 1234; 
}

var x = new Animal();
var y = Animal();

console.log(x); //prints object containing property abc set to value 1
console.log(y); // prints 1234

答案 6 :(得分:1)

您还可以创建单个 Date 对象并使用静态函数 Date.now() 更新它:

<!doctype html>
<html> <head></head>
<body>

<h1 id="datetime"></h1>

<script>
    elem_datetime = document.getElementById('datetime');
    var date = new Date();
    function sometimer()
    {
        setTimeout(sometimer, 1*1000); // wait 1 second and call again
        date.setTime(Date.now());
        elem_datetime.innerHTML = date.toDateString() + ' ' + date.toLocaleTimeString();
    }
    sometimer();
</script>

</body>
</html>
    

答案 7 :(得分:0)

您没有收到“无效日期”错误。 相反,temp的值是“无效日期”。

您的日期字符串是否为有效格式? 如果您使用的是Firefox,请检查Date.parse

在Firefox javascript控制台中:

>>> Date.parse("2010-08-17 12:09:36");
NaN
>>> Date.parse("Aug 9, 1995")
807944400000

我会尝试不同的日期字符串格式。

Zebi,您使用的是Internet Explorer吗?

答案 8 :(得分:0)

我使用以ISO 8601格式回复的API调用遇到了同样的问题。 在Chrome中工作这有效:  `

// date variable from an api all in ISO 8601 format yyyy-mm-dd hh:mm:ss
  var date = oDate['events']['event'][0]['start_time'];
  var eventDate = new Date();
  var outputDate = eventDate.toDateString();

`

但这不适用于firefox。

上面的回答帮我格式化了firefox:

 // date variable from an api all in ISO 8601 format yyyy-mm-dd hh:mm:ss
 var date = oDate['events']['event'][0]['start_time'];
 var eventDate = new Date(date.replace(/-/g,"/");
 var outputDate = eventDate.toDateString();

答案 9 :(得分:-2)

我最近也碰到了这个,这是一个有用的帖子。我将上面的Topera更进了一步,这对我来说都适用于chrome和firefox:

var temp = new Date(  Date("2010-08-17 12:09:36")   );
alert(temp);

Date()的内部调用会返回new Date()可以解析的字符串。