无论用户所在的时区如何,我都以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 指定布局,但找不到任何内容。
答案 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());