好的,所以我有一个功能,我正在为一个新的网站,我需要显示当前的时间为东海岸和西海岸.它需要以以下方式显示: 纽约时间11:24:21 CA 08:24:21 PM

到目前为止,我已经设法让时区开始显示,但我需要确保它们都只指向美国东部夏令时和夏令时,并且它们都显示在适当的html块内.我还需要上午/下午包装在一个html块.

以下是我的样例代码:

function showTime() {
    let date = new Date();
    let hours = date.getHours();
    let minutes = date.getMinutes();
    let seconds = date.getSeconds();
    let formatHours = convertFormat(hours)
    
    hours = checkTime(hours)
    hours = addZero(hours)
    minutes = addZero(minutes)
    seconds = addZero(seconds)
    let format = `NY ${hours}:${minutes}:${seconds} <small class="font-medium">${formatHours}</small>`
    let pstDate = date.toLocaleTimeString("en-US", {timeZone: "America/Los_Angeles"}, {timeStyle: 'short'})

    // Output Times
    $('.time-ny').html(format);
    $('.time-ca').html(pstDate);
}

function convertFormat(time) {
    let formmat = 'PM'
    if (time >= 12) {
        format = 'AM'
    }
    return formmat;
}

function checkTime(time) {
    if (time > 12) {
        time = time - 12;
    }
    if (time === 0) {
        time = 12;
    }
    return time
}

function addZero(time) {
    if (time < 10) {
        time = "0" + time;
    }
    return time
}
showTime()
setInterval(showTime, 1000)
body {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #000000;
    flex-direction: column;
}

.clock {
    font-family: sans-serif;
    font-size: 1rem;
    color: #fff;
}

.font-medium {
    font-weight: 500;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="clock time-ny"></div>
<div class="clock time-ca"></div>

任何来自你们真正的JS程序员的帮助都将是超级感激的.我try 过这种东西,但它永远不会是我的谋生之道.

推荐答案

要使代码正常工作,需要对代码进行两个调整:

  1. 设置时间字符串的格式,并将AM/PM包装在一个HTML块中.
  2. 使用toLocaleString()方法获取东海岸和西海岸时间,然后将其传递给格式化时间字符串的函数(如上第1点所述).

示例将如下所示:

function showTime() {
  let date = new Date();
  let estDate = new Date(date.toLocaleString("en-US", {
    timeZone: "America/New_York"
  }));
  let pstDate = new Date(date.toLocaleString("en-US", {
    timeZone: "America/Los_Angeles"
  }));

  let formatNY = formatTime(estDate);
  let formatCA = formatTime(pstDate);

  // Output Times
  $('.time-ny').html(formatNY);
  $('.time-ca').html(formatCA);
}
// Created this method to format time.
function formatTime(date) {
  let hours = date.getHours();
  let minutes = date.getMinutes();
  let seconds = date.getSeconds();
  let formatHours = convertFormat(hours);

  hours = checkTime(hours);
  hours = addZero(hours);
  minutes = addZero(minutes);
  seconds = addZero(seconds);

  return `${hours}:${minutes}:${seconds} <small class="font-medium">${formatHours}</small>`;
}

function convertFormat(time) {
  let format = 'AM';
  if (time >= 12) {
    format = 'PM';
  }
  return format;
}

function checkTime(time) {
  if (time >= 12) {
    time = time - 12;
  }
  if (time === 0) {
    time = 12;
  }
  return time;
}

function addZero(time) {
  if (time < 10) {
    time = "0" + time;
  }
  return time;
}

showTime();
setInterval(showTime, 1000);
body {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #000000;
    flex-direction: column;
}

.clock {
    font-family: sans-serif;
    font-size: 1rem;
    color: #fff;
}

.font-medium {
    font-weight: 500;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="clock time-ny"></div>
<div class="clock time-ca"></div>


替代解决方案:

作为一种建议和替代方法,您还可以通过利用语言本身提供的Intl对象来使代码简洁.示例代码如下所示:

function showTime() {
  const date = new Date();
  const estDate = new Date(date.toLocaleString("en-US", {
    timeZone: "America/New_York"
  }));
  const pstDate = new Date(date.toLocaleString("en-US", {
    timeZone: "America/Los_Angeles"
  }));

  const formatNY = formatTime(estDate, 'NY');
  const formatCA = formatTime(pstDate, 'CA');

  // Output Times
  $('.time-ny').html(formatNY);
  $('.time-ca').html(formatCA);
}

function formatTime(date, label) {
  const timeFormatter = new Intl.DateTimeFormat('en-US', {
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: true,
  });

  const formattedTime = timeFormatter.format(date);
  const [time, period] = formattedTime.split(' ');

  return `${label} ${time} <small class="font-medium">${period}</small>`;
}

showTime();
setInterval(showTime, 1000);
body {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background-color: #000000;
  flex-direction: column;
}

.clock {
  font-family: sans-serif;
  font-size: 1rem;
  color: #fff;
}

.font-medium {
  font-weight: 500;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="clock time-ny"></div>
<div class="clock time-ca"></div>

Javascript相关问答推荐

序列查找器功能应用默认值而不是读取响应

获取表格的左滚动位置

vanillajs-datepicker未设置输入值,日期单击时未触发更改事件

使用useup时,React-Redux无法找到Redux上下文值

使用i18next在React中不重新加载翻译动态数据的问题

为什么promise对js中的错误有一个奇怪的优先级?

有没有可能使滑动img动画以更快的速度连续?

Chart.js 4.4.2,当悬停在一个数据点上时,如何在工具提示中拥有多个数据点/标签?

我在我的Java代码中遇到了问题,代码的一部分看不到先前定义的对象

为什么useState触发具有相同值的呈现

WP Bootstrap NavWaker:下拉菜单一次打开所有下拉菜单

使用js构造一个html<;ath&>元素并不能使其正确呈现

Vaadin定制组件-保持对javascrip变量的访问

获取';无法解决导入和导入";slick-carousel/slick/slick-theme.css";';错误

如何在尚未创建的鼠标悬停事件上访问和着色div?

使用可配置项目创建网格

对不同目录中的Angular material 表列进行排序

如何检测当前是否没有按下键盘上的键?

如果查询为空,则MongoDB将所有文档与$in匹配

元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件),但GET:Object.在Reaction项目中