【问题标题】:Javascript get localized weekday without a DateTime objectJavascript 在没有 DateTime 对象的情况下获得本地化工作日
【发布时间】:2022-09-30 01:50:41
【问题描述】:

我目前将日期值作为字符串。 (例如\"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\", \"sunday\")但没有日期。

日子描述了商店的营业时间,我想根据商店设置的语言环境动态翻译这些字符串值。

我注意到 JS 有很棒的方法 Date.prototype.toLocaleDateString() 但似乎我不能在不提供日期的情况下获得本地化的字符串。你会怎么做?

    标签: javascript weekday


    【解决方案1】:

    看看Date.prototype.getDay

    const weekdays = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
    
    const date = new Date();
    
    // get first day of week, and then add the weekday
    
    let day = date.getDate() - date.getDay() + weekdays.indexOf("Saturday");
    let day = date.getDate() - date.getDay() + weekdays.indexOf("Monday");
    let day = date.getDate() - date.getDay() + weekdays.indexOf("Sunday");
    
    date.setDate(day)
    
    console.log(date.toString());

    【讨论】:

    • 这没有回答问题,即如何根据语言环境将英文工作日字符串转换为翻译的字符串。
    【解决方案2】:

    您可以根据工作日创建一个虚拟日期,选择年份和月份,使日期值 0 与星期日匹配(是的,您也可以指定第 0 天)。

    然后您可以使用toLocaleDateString 和日期来询问翻译后的工作日字符串。

    (我还在这里调用了Intl.DateTimeFormatter 来获取用户的默认语言环境,因为我们不能在不指定语言环境的情况下指定选项对象。)

    const WEEKDAYS = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']
    
    function translateWeekday (weekdayString) {
      const weekdayIndex = WEEKDAYS.indexOf(weekdayString.toLowerCase())
      if (weekdayIndex < 0) throw new Error(`Unknown weekday "${weekdayString}"`)
    
      const dummyDate = new Date(2001, 0, weekdayIndex)
      const locale = new Intl.DateTimeFormat().resolvedOptions().locale
    
      return dummyDate.toLocaleDateString(locale, { weekday: 'long' })
    }
    

    例如,在我使用德语语言环境的机器上,translateWeekday('Wednesday') 返回'Mittwoch'

    【讨论】:

      【解决方案3】:

      您可以使用 Date() 也许

      // current date

      let date = new Date();
      

      此外,我们可以得到一周中的某一天:

      getDay()
      

      获取星期几,从 0(星期日)到 6(星期六)。

      使用 Date() 方法时,您还可以检查年、月、日和时间。也许如果你想检查它不是在圣诞节或关闭时间等之后。应该可以正常工作!

      方法:

      getFullYear()
      

      获取年份(4 位数字)

      getMonth()
      

      获取月份,从 0 到 11。

      getDate()
      

      获取月份中的日期,从 1 到 31,方法的名称看起来确实有点奇怪。

      getHours(), getMinutes(), getSeconds(), getMilliseconds()
      

      获取对应的时间分量。

      【讨论】:

      • 这并没有回答问题,即如何根据语言环境将英文工作日字符串转换为翻译的字符串。
      • 这是我的第一种方法,但日期在这里并不重要。事实上,我不是负责处理商店是否关闭的人,我从后端团队获得了这些信息 :) 所以我在这里唯一真正的任务是将“星期一”翻译成“蒙塔格”,如果它是一家德国商店,我们'再谈。我不知道如果没有日期对象可以使用它是否可能。
      【解决方案4】:

      只需创建一个指向任何星期一的新日期对象,然后在调用date.ToLocaleDateString(LOC, {weekday: 'long'}) 时连续添加天数,将LOC 替换为您希望使用的任何语言环境,以定义您希望以哪种语言获取星期名称。

      function listDayNames(elem, locale)
      {
        let e = document.getElementById(elem);
        let date = new Date('2022/08/22');
        for(let i=0;i<=6;i++) {
          e.innerHTML += date.toLocaleDateString(locale, { weekday: 'long' }) + '<br>';        
          date.setDate(date.getDate() + 1);
        }
        e.innerHTML += '<hr>';
      }
      
      let date = new Date();
      listDayNames('days', 'en-US');
      listDayNames('days', 'de-DE');
      &lt;p id="days"&gt;&lt;/p&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-17
        相关资源
        最近更新 更多