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



无论用户在哪个时区,我都将SQL中的日期/时间存储在UTC时区。

现在我需要在客户端机器上显示本地时区的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指定布局,但找不到任何内容。

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

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());

相关内容

  • 没有找到相关文章