Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript日期格式化和转换问题_Javascript_Date_Datetime - Fatal编程技术网

JavaScript日期格式化和转换问题

JavaScript日期格式化和转换问题,javascript,date,datetime,Javascript,Date,Datetime,我位于PST时区,我希望能够将字符串“2014-01-01”转换为Unix时间,而不会将“2014-01-01”转换为PST 以下是我正在做的: Date.parse(new Date("2014-01-01")) 我得到的值是138853440000,相当于2013年12月31日星期二16:00:00 GMT-0800(太平洋标准时间) 我想把日期定为“2014-01-01”,在转换为Unix时间之前不要将其转换为PST 有几件事: Date构造函数返回一个Date对象,而不是字符串。您不

我位于PST时区,我希望能够将字符串“2014-01-01”转换为Unix时间,而不会将“2014-01-01”转换为PST

以下是我正在做的:

Date.parse(new Date("2014-01-01"))
我得到的值是138853440000,相当于2013年12月31日星期二16:00:00 GMT-0800(太平洋标准时间)

我想把日期定为“2014-01-01”,在转换为Unix时间之前不要将其转换为PST

有几件事:

  • Date
    构造函数返回一个
    Date
    对象,而不是字符串。您不应该在调用
    Date.parse
    时将其包装起来

    如果需要unix时间戳,只需调用
    getTime()

    或者,您可以解析日期字符串,而无需创建
    date
    对象

    var ts = Date.parse("2014-01-01");
    
  • JavaScript中的日期解析行为依赖于实现。由于短划线(
    -
    ),大多数浏览器已经将
    yyyy-mm-dd
    字符串解释为UTC格式。如果替换为斜杠(
    /
    ),则会看到字符串被解释为本地时间

  • 我想你对输出感到困惑。您说过时间戳等同于PST,但这只是一种表示。它也相当于您传入的UTC值。它不会在输入中转换,而是在将时间戳转换回本地时间时进行转换

  • 您可以使用类似的库,它使您能够完全控制输入和输出。这通常是最好的选择,但是在应用程序中包含一个库会增加开销


将指定的日期字符串转换为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);
console.log( new Date( str ).toUTCString( ms ));
Date.UTC()返回从1970年1月1日午夜到指定日期的瞬间发生的毫秒数,而不考虑任何时区。脚本将毫秒数除以1000,将结果转换为Unix时间,即秒

将字符串拆分为数组后,代码会调整包含月份的元素,以免JavaScript将其值误认为是三月;JavaScript将数字月份理解为0-11,而不是1-12。接下来,脚本根据Date.UTC所需的年、月、日参数顺序传递元素。尽管UTC()希望参数为数字,但它接受数字字符串

注意:如果您首先创建一个新的日期对象,并希望使用UTC方法——这会导致一个错误,因为它是JavaScript日期对象的静态方法

您可以使用上述变量ms和str检查UTC()返回值的有效性,如下所示:

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);
console.log( new Date( str ).toUTCString( ms ));
输出:
Wed,2014年1月1日00:00:00 GMT

请看现场演示)


将日期字符串传递给日期构造函数而不是它所期望的数字参数会带来意想不到的好处;日期字符串被视为其时区为UTC,即本地日期对象将其视为零。创建后,本地日期对象将执行其toutString()方法以获得上述结果。toString()方法也会产生相同的输出,但它会附加本地时区信息

可能的重复:?您实际想要的正好相反(在将时间转换为Unix时间之前将时间转换为PST)。@Juhana我如何将“2014-01-01”转换为PST?
Date.parse(新日期(“2014-01-01 PST”))
(不知道这有多方便)只需使用Momentjs即可满足您所有的日期需求。