我位于PST时区,我希望能够将字符串“2014-01-01”转换为Unix时间而不将“2014-01-01”转换为PST。
这就是我正在做的事情:
Date.parse(new Date("2014-01-01"))
我的价值是1388534400000,相当于 2013年12月31日星期二16:00:00 GMT-0800(太平洋标准时间)
我想将日期设为“2014-01-01”,并在将其转换为Unix时间之前不将其转换为PST。
答案 0 :(得分:3)
一些事情:
Date
构造函数返回Date
对象,而不是字符串。你不应该打电话给Date.parse
。
如果您想要一个unix时间戳,只需拨打getTime()
。
var ts = new Date("2014-01-01").getTime();
或者,您可以在不创建Date
对象的情况下解析日期字符串。
var ts = Date.parse("2014-01-01");
JavaScript中日期解析的行为取决于实现。由于破折号(yyyy-mm-dd
),大多数浏览器已经将-
字符串解释为UTC格式。如果用斜杠(/
)替换,则会看到字符串被解释为本地时间。
我认为您对输出感到困惑。你说时间戳相当于PST,但这只是一种表示。它也等同于您传入的UTC值。它未在输入中转换,当您将时间戳转换回本地时,它将被转换。
< / LI>您可以使用moment.js之类的库,它可以让您完全控制输入和输出。这通常是最好的选择,但是在您的应用程序中包含库的开销很大。
答案 1 :(得分:0)
将指定日期字符串转换为Unix时间的另一种方法如下:
var str = "2014-01-01";
var parts = str.split('-');
parts[1] -= 1; // js numeric mos are 0-11
var ms = Date.UTC( parts[0], parts[1], parts[2] ); // parts: YYYY, MM, DD
var unix_time = ms/1000; // Unix time uses seconds
console.log("Unix time: " + unix_time);
Date.UTC()返回自1970年1月1日午夜到指定日期的 instant 以来发生的毫秒数,与时区无关。该脚本将结果转换为Unix时间,即秒,将毫秒数除以1000。
将字符串拆分为数组后,代码会调整包含月份的元素,以免JavaScript误认为是3月的值; JavaScript将数字月份理解为0-11,而不是1-12。接下来,脚本按照Date.UTC所需的年,月,日参数顺序传递元素。虽然UTC()期望参数的数字,但它接受数字字符串。
注意:如果您首先创建一个新的日期对象并期望使用UTC方法 - 这会导致错误,因为它是JavaScript的日期对象的静态方法。
您可以使用上述变量ms和str检查UTC()返回值的有效性,如下所示:
console.log( new Date( str ).toUTCString( ms ));
输出:Wed, 01 Jan 2014 00:00:00 GMT
查看实时演示here)
将日期字符串传递给Date构造函数而不是它期望的数字参数可以提供意想不到的好处;日期字符串被视为时区为UTC,即本地日期对象为零。一旦创建,本地日期对象就执行其toUTCString()方法以获得上述结果。 toString()方法也会产生相同的输出,但它会附加本地时区信息。