将字符串转换为日期而不考虑时区-Typescript

时间:2018-10-10 15:37:00

标签: javascript typescript date momentjs

我将日期作为字符串,格式如下(例如):

someArray.forEach(data =>  data.color = 'red');

这是UTC时间。

当我从此字符串创建Date时,它将其视为本地时间:

"11/10/2015 10:00:00"

它打印:

let time = "11/10/2015 10:00:00";
let date = new Date(time); 
console.log(date);

(而不是将其视为UTC:“ 2015年11月10日星期二10:00:00”)

我也尝试过使用moment.js。

有没有一种好的方法可以使Date()将字符串视为UTC,而不必在字符串末尾添加“ Z” /“ UTC” /“ + 000”?

3 个答案:

答案 0 :(得分:2)

您可以使用内置的Date.UTC()函数来执行此操作。这是一个小功能,它将采用您在原始帖子中给出的格式,并将其转换为UTC日期字符串

let time = "11/10/2015 10:00:00";

function getUTCDate(dateString) {
  // dateString format will be "MM/DD/YYYY HH:mm:ss"
  var [date, time] = dateString.split(" ");
  var [month, day, year] = date.split("/");
  var [hours, minutes, seconds] = time.split(":");
  // month is 0 indexed in Date operations, subtract 1 when converting string to Date object
  return new Date(Date.UTC(year, month - 1, day, hours, minutes, seconds)).toUTCString();
}

console.log(getUTCDate(time));

答案 1 :(得分:1)

日期构造器以MM / DD / YYYY格式解析您的日期,并应用本地时区偏移量(因此输出表示所讨论的一天开始时的本地午夜)。如果您的日期确实是MM / DD / YYYY,那么您要做的就是减去时区偏移量,您将获得UTC日期...

{
    "id": 1,
    "title": "Title one",
    "category_data": {
        "2": "Team",
        "7": "Queries"
    }
},

Here's everything I know关于在序列化和反序列化日期时管理时区。所有时区处理都是静态的! JS日期没有内部时区。

答案 2 :(得分:0)

您可以为此使用Date.UTC,但是您将不得不解析您的字符串,并将其每一部分都作为args自己放置,因为它无法解析此类字符串。您也可以使用moment.js来解析它:Convert date to another timezone in JavaScript

此外,似乎gulp.task("uploadcss", function() { gulp.src('public/css/*.css') .pipe(s3({ Bucket: 'mybucket-assets', // Required ACL: 'public-read' // Needs to be user-defined }, { // S3 Constructor Options, ie: maxRetries: 5 })) ; }); 会将日期解析为格林尼治标准时间,并且只有在将日期转换为PC当地时间之后