如果日期是今天的日期显示“今天”或“昨天”

时间:2016-02-01 14:06:45

标签: javascript jquery date shopify

在我的Shopify博客中,我可以通过以下代码显示发布文章的日期:

{{ article.created_at | date: "%A, %-d. %B" }}

它显示如下:星期五,1月22日。 See date desc from Shopify here.

是否可以创建一个脚本来检查日期是否为今天,然后显示shopify日期脚本的“今天”文本?和“昨天”?

5 个答案:

答案 0 :(得分:2)

这是一个,使用toLocaleDateString()

function renderDate(date) {
  const today = new Date
  const yesterday = new Date; yesterday.setDate(today.getDate() - 1)
  if(date.toLocaleDateString() == today.toLocaleDateString()){
    return 'Today'
  }else if (date.toLocaleDateString() == yesterday.toLocaleDateString()) {
    return 'Yesterday'
  }
  return date.toLocaleDateString('en-US', {
    day : 'numeric',
    month : 'long'
  })
}
//Test:
renderDate(new Date('2016-11-11'))
"Today"
renderDate(new Date('2016-11-10'))
"Yesterday"
renderDate(new Date('2016-11-0'))
"Invalid Date"
renderDate(new Date('2016-11-5'))
"November 5"

答案 1 :(得分:1)

您可以使用Control Flow Tags来实现此目标。

  {%if {{article.created_at|date: "%Y %b %d"}}== {{ 'now' | date: "%Y %b %d" }} %}
       Today
    {% else %}
    Yesterday
      {% endif %}

答案 2 :(得分:1)

Shopify可能有一个内置的解决方案,但如果没有,在页面加载后运行此脚本应该可以为您提供所需的方法。

但请注意,该日期为calc。需要有一年,否则就会出错。

请求后更新以显示年份

要显示没有年份的日期,您可以这样做,您可以按照自己喜欢的方式设置可见日期的格式,因为它使用了data-date值。

这样做的一个积极的副作用是,如果您需要日期,它仍然会出现在data-date属性中。

<span class="date" data-date='{{ article.published_at | date: "%F" }}'>{{ article.created_at | date: "%A, %-d. %B" }}</span>

更新了示例

&#13;
&#13;
function makeYMD(d) {
  return d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate();
}
function getYesterday(d) {
  return new Date(d.setDate(d.getDate() - 1));
}

var span = document.querySelector('span.date');
var spandate = new Date(span.getAttribute("data-date"));
var today = new Date();
var yesterday = getYesterday(new Date());

spandate = makeYMD(spandate);
today = makeYMD(today);
yesterday = makeYMD(yesterday);


if(today == spandate) {
   span.textContent = "Today";
} else if(yesterday == spandate) {
   span.textContent = "Yesterday";
}
&#13;
<span class="date" data-date='2016-01-31'>Monday, 31. January</span>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

在这里测试https://jsfiddle.net/027jch3z/

var now = new Date;
function today( created_at_day,created_at_month,created_at_year, now ){
 return created_at_day== now.getUTCDate() &&
         created_at_month == (now.getUTCMonth()+1) &&
         created_at_year == now.getUTCFullYear();
}

// for yesterday, do some calculation here,
var yest = new Date(now);
yest = new Date(yest.setDate(d.getDate() -1));

function yesterday( created_at_day,created_at_month,created_at_year, yest )
{
  return created_at_day == yest.getUTCDate() &&
         created_at_month == (yest.getUTCMonth() +1) &&
         created_at_year == yest.getUTCFullYear();
}


//test calls
alert("Today: "+today(1,2,2016,now));
alert("Yesterday: "+yesterday(31,1,2016,yest));

答案 4 :(得分:0)

使用将执行此操作的AngularJS过滤器。请看这里的例子:

演示:https://www.screencast.com/t/rh609WQI6

代码:https://codepen.io/skounis/pen/PKPKGw

export default compose(
    translate('translations'),
    connect()
)(LanguageChooser);