Как конвертировать дату JavaScript в UTC?

К сожалению, вы не можете различать тип метода для вызова, основанный только на ограничениях.

Поэтому вам нужно определить метод в другом классе или с другим именем.

508
задан dthrasher 4 June 2009 в 03:54
поделиться

5 ответов

пряжа добавляет момент

import moment from 'moment';

//local Js date to UTC using moment
const utcDate = moment.utc(moment(new date()).format('YYYY-MM-DDTHH:mm:ss')).valueOf();
console.log('UTC Date', utcDate);


// UTC to local date without moment
const localDate = convertUTCDateToLocalDate(new Date(utcDate))
console.log('UTC Date', moment(localDate).format('MMM D, YYYY HH:mm'));


function convertUTCDateToLocalDate(date) {

   let newDate = new Date(date.getTime() + date.getTimezoneOffset()*60*1000);

   const offset = date.getTimezoneOffset() / 60;
   const hours = date.getHours();

   newDate.setHours(hours - offset);

   return newDate;

}
0
ответ дан 22 November 2019 в 22:23
поделиться

Вы пытаетесь преобразовать дату в такую ​​строку?

Я бы создал функцию для этого и, хотя это немного противоречиво, добавил бы ее к прототипу Date. Если вам неудобно это делать, вы можете поместить ее как отдельную функцию, передав дату в качестве параметра.

Date.prototype.getISOString = function() {
    var zone = '', temp = -this.getTimezoneOffset() / 60 * 100;
    if (temp >= 0) zone += "+";
    zone += (Math.abs(temp) < 100 ? "00" : (Math.abs(temp) < 1000 ? "0" : "")) + temp;

    // "2009-6-4T14:7:32+10:00"
    return this.getFullYear()   // 2009
         + "-"
         + (this.getMonth() + 1) // 6
         + "-"
         + this.getDate()       // 4
         + "T"
         + this.getHours()      // 14
         + ":"
         + this.getMinutes()    // 7
         + ":"
         + this.getSeconds()    // 32
         + zone.substr(0, 3)    // +10
         + ":"
         + String(temp).substr(-2) // 00
    ;
};

Если вам это нужно во времени UTC, просто замените все функции get * на getUTC *, например : getUTCFullYear, getUTCMonth, getUTCHours ... а затем просто добавьте "+00: 00" в конце вместо смещения часового пояса пользователя.

7
ответ дан 22 November 2019 в 22:23
поделиться
var myDate = new Date(); // Set this to your date in whichever timezone.
var utcDate = myDate.toUTCString();
15
ответ дан 22 November 2019 в 22:23
поделиться
Date.prototype.toUTCArray= function(){
    var D= this;
    return [D.getUTCFullYear(), D.getUTCMonth(), D.getUTCDate(), D.getUTCHours(),
    D.getUTCMinutes(), D.getUTCSeconds()];
}

Date.prototype.toISO= function(){
    var tem, A= this.toUTCArray(), i= 0;
    A[1]+= 1;
    while(i++<7){
        tem= A[i];
        if(tem<10) A[i]= '0'+tem;
    }
    return A.splice(0, 3).join('-')+'T'+A.join(':');    
}
24
ответ дан 22 November 2019 в 22:23
поделиться

Я только что обнаружил, что версия 1.2.3 date.format.js Стивена Левитана делает именно то, что я хочу. Он позволяет вам предоставить строку формата для даты JavaScript и преобразует местное время в UTC. Вот код, который я использую сейчас:

// JavaScript dates don't like hyphens!    
var rectifiedDateText = dateText.replace(/-/g, "/");
var d = new Date(rectifiedDateText);

// Using a predefined mask from date.format.js.
var convertedDate = dateFormat(d, 'isoUtcDateTime'); 
4
ответ дан 22 November 2019 в 22:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: