【问题标题】:Dates for different calendars不同日历的日期
【发布时间】:2015-06-02 06:42:18
【问题描述】:

我正在开展一个已经在 2 个国家/地区运行的项目。在我们将项目部署到尼泊尔之前,一切都很好。问题是他们没有使用标准的公历。他们有自己的日历,称为 Bikram Sanwant 日历。我们现有的数据库有 DateTime/Date 列,我不能再使用了,因为他们日历中的几个月有 32 天,根据公历,这不是有效日期。因此,我们考虑将所有日期保存在 3 个不同的列中,例如日、月和年。不仅如此,我们还使用了内置的标准 SQL DateTime 函数,如 DateAdd、DateDiff 等……所以我还必须编写自己的函数并更改所有查询、存储过程和函数。

有谁知道如何处理这个问题或对此问题有更好的了解?

请提供您的意见和建议。

提前致谢。

【问题讨论】:

  • 只存储一个日期,ISO 格式。根据 Bikram Sanwant 具有可查看和修改的视图/功能。
  • 一些编程语言在他们的库中提供了到 BS 日期的转换,你可以在你的应用程序中进行转换,如果你使用的语言不支持它,那么你应该做一个:D
  • 感谢您的评论,但是 ISO 格式会接受像 2072-08-32 这样的日期吗?
  • @JeremyC。感谢您的回复,但问题不在前端,我知道有很多工具可以转换日期,问题在于将它们存储在后端。
  • @hirensoni 您可以将它们存储为公历日期(在存储之前将它们转换为公历日期)并在您的应用程序中以正确的方式显示它们(阅读时转换回 bs)?

标签: sql date datetime calendar sqldatetime


【解决方案1】:

检查此 php 代码以将 AD 转换为 BS。希望这可以帮助您了解更多。

<?php 
    //The Vikram Samvat calendar is 56 years 8 months and 14 days ahead (in count) of the solar Gregorian calendar
    //date_default_timezone_set('Asia/Kathmandu');

    $date = date('Y-m-d');
    $ts1 = strtotime($date);
    $year1 = date('Y', $ts1) + 56;
    $month1 = date('m', $ts1) + 8;
    $day1 = date('d', $ts1) + 14;

    if($month1 >12) {
      $year1 = $year1+1;
      //$remMonth = $month1-12;
      $month1 = $month1-12;
    }

    if($day1 >30) {
       $month1 = $month1+1;
      //$remMonth = $month1-12;
       $day1 = $day1-30;
    }

    //$day1 = date('d', $ts1);
    echo $year1."-".$month1."-".$day1;

?>

【讨论】:

    猜你喜欢
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多