如何将DateTime从UTC转换为Local,然后可靠地捕获元素

时间:2014-04-10 15:45:54

标签: javascript datetime

无论用户所在的时区如何,我都以UTC时区存储SQL中的日期/时间。

现在我需要在客户端机器上的本地时区显示D / T - 在单独的字段中(月,日,小时等的下拉菜单),因此在将D / T转换为本地后,我需要打破除此之外,使用 .toLocal .toLocalString 在浏览器和用户首选项之间不一致;因此,我不能完全打破弦乐。

这就是我正在做的事情:

var utcDTString=$("#utcDateTime"); // this is in format YYYY-MM-DD HH:MM:SS coming from SQL in UTC Time zone
var utcDateObj=new Date(utcDTString+' UTC'); // create a date obj of UTC DateTime in UTC time zone
var localDT=utcDateObj.toLocaleString(); // convert the DT to local Time zone 

现在,我如何可靠地从 localDT 推断年,月,日,小时,分钟,因为不同的浏览器和用户首选项可能导致字符串采用各种格式。

我查看是否可以为 .toLocaleString 指定布局,但找不到任何内容。

1 个答案:

答案 0 :(得分:0)

我让它变得比它需要的更难。我假设当我使用.getHours()时,它只会返回当前时区中当前日期对象的小时值(在我的情况下为UTC)。 我错了。在UTC时区的Date对象上使用.getHours()时,它会返回本地客户端时间内的所有值 - 而不是对象的时区。因此我不需要使用.toLocaleString我可以简单地从日期对象中抓取值并自动转换为本地时间。因此,这非常有效:

var sDT=$("#startMonth").data("startingvalue");
var utcdt=new Date(sDT+' UTC');
var startDateTime = utcdt;
$("#startMonth").val(startDateTime.getMonth()+1);
$("#startDay").val(startDateTime.getDate());
$("#startYear").val(startDateTime.getFullYear());
var sH=startDateTime.getHours();
if(sH>=12){
    $("#startAMPM").val("PM");
    if(sH>12){
        sH-=12;
    }
}else{
    $("#startAMPM").val("AM");
}
if(parseInt(sH)<10){
    sH="0"+sH;
}
$("#startHour").val(sH);
$("#startMinute").val(startDateTime.getMinutes());