【问题标题】:How to detect if first day of the week is Saturday, Sunday, or Monday?如何检测一周的第一天是周六、周日还是周一?
【发布时间】:2021-01-11 07:21:42
【问题描述】:

我的 PHP 应用程序检测一周的第一天是否正在运行的 php 进程的无依赖解决方案是什么?示例:

  • 星期六(中东周历)
  • 星期日(西方周历)
  • 星期一(ISO-8601 周历)。

我试过这个:

$first_day_of_week = date('l', strtotime('This week'));

我预计代码会在周日返回美国用户,周一返回欧洲用户。但它总是返回星期一(ISO-8601 周历)。

【问题讨论】:

  • 如果您想根据服务器时间获取客户端时间,请使用通用时间常数,可以将其传递给 JavaScript $passToNewDate = time()*1000;。因为 PHP 需要几秒钟,而 JavaScript 需要几毫秒 *1000。我会 AJAX 到 const dt = new Date(dateAJAXresult); console.log(dt.toString())。
  • 感谢您的努力。这是需要在本地机器上识别星期类型的分布式代码。所以不是浏览器客户端,而是机器本身。
  • date_default_timezone_set('America/Vancouver') 为 date 函数设置 php.ini 时区。对于多个时区,请考虑DateTime::setTimezone。
  • @StackSlave 是的,但我尝试设置 date_default_timezone_set('America/Los_Angeles');但它仍然在星期一输出。
  • 在 PHP 日期函数中,一周的开始总是ISO-8601。你必须加或减。

标签: php date


【解决方案1】:

虽然不是一个无依赖的解决方案。这是使用 PHP 扩展 Intl 检测星期类型。

if (extension_loaded('intl')) {
  switch (IntlCalendar::createInstance()->getFirstDayOfWeek()) {
    case 1: $first_day_of_week = 'Sunday'; break; // Western
    case 2: $first_day_of_week = 'Monday'; break; // ISO-8601
    case 7: $first_day_of_week = 'Saturday'; break; // Middle Eastern
  }
} else {
  trigger_error('PHP is missing the Intl extension', E_USER_WARNING);
}

【讨论】:

    【解决方案2】:

    一周的第一天由

    返回
    $no = IntlCalendar::createInstance()->getFirstDayOfWeek();
    

    取决于你的 php.ini。您可以使用 locale_get_default() 获得默认值。 IntlCalendar::createInstance() 接受一个语言环境作为第二个参数,然后在一周的第一天提供不同的结果。

    foreach(['en_AE','en_US','en_GB'] as $locale){
      $no = IntlCalendar::createInstance(null,$locale)->getFirstDayOfWeek();
      $weekDayName = date('l', strtotime('Saturday +'.$no.' days'));
      echo $locale.' : '.$weekDayName.'<br>';
    }
    

    输出:

    en_AE : Saturday
    en_US : Sunday
    en_GB : Monday
    

    不管怎样,以下适用于日期和日期时间:

    PHP 日期函数中的星期开始始终是 ISO-8601。

    (正如评论中已经指出的)

    【讨论】:

    • 是的,方法与上一个答案相同。但不是一个无依赖的解决方案。并非所有最终用户都加载了 intl 扩展。还有其他方法吗?
    • 现在国际扩展是标准的。 PHP 看不到服务器在哪里以及那里使用了哪个本地日历。所有这些信息最终都必须在服务器配置中设置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多